当前位置: 首页 > news >正文

wordpress做的视听网站广州seo工资

wordpress做的视听网站,广州seo工资,后台管理网站建设,网络营销推广案例有哪些文章目录 1. 线程通信2. Object类中的wait和notify方法实现等待和唤醒3. Condition接口中的await和signal方法实现等待和唤醒4. LockSupport实现等待和唤醒4.1 优点 1. 线程通信 多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相…

文章目录

    • 1. 线程通信
    • 2. Object类中的wait和notify方法实现等待和唤醒
    • 3. Condition接口中的await和signal方法实现等待和唤醒
    • 4. LockSupport实现等待和唤醒
      • 4.1 优点

1. 线程通信

多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同,于是这些线程之间就存在通信问题,称为线程间通信。

比如:生产者消费者问题。

当多个线程间存在通信问题时,我们希望它们能有规律地执行,因此就需要一些协调手段,其中,等待唤醒机制就是协调线程间通信的一种有效手段。

2. Object类中的wait和notify方法实现等待和唤醒

  • wait和notify方法必须在同步块或者方法里面使用,且成对出现
  • 必须先wait后notify才OK
public static void main(String[] args) {Object monitor = new Object();new Thread(() -> {synchronized (monitor) {System.out.println("线程1执行");try {monitor.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}}).start();try {TimeUnit.SECONDS.sleep(1);} catch (Exception e) {e.printStackTrace();}new Thread(() -> {System.out.println("线程2执行");synchronized (monitor) {monitor.notify();}}).start();
}

3. Condition接口中的await和signal方法实现等待和唤醒

  • Condition中的线程等待和唤醒方法,需要先获取锁
  • 一定要先await后signal
public static void main(String[] args) {Lock lock = new ReentrantLock();Condition condition = lock.newCondition();new Thread(() -> {System.out.println("线程1执行");lock.lock();try{condition.await();System.out.println("线程1被唤醒");} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}).start();try {TimeUnit.SECONDS.sleep(1);} catch (Exception e) {e.printStackTrace();}new Thread(() -> {System.out.println("线程2执行");lock.lock();try{condition.signal();} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}}).start();
}

4. LockSupport实现等待和唤醒

LockSupport类使用了一种名为Permit(许可)的概念来做到阻塞和唤醒线程的功能,每个线程都有一个permit。但与Semaphore不同的是,许可的累加上限是1

  • park():permit许可证默认没有,所以一开始调用park()方法当前线程就会阻塞,直到别的线程给该线程发放permit,该线程才会被唤醒
  • unpark(thread):发放permit许可证给对应线程thread
  • 满足 正常阻塞唤醒要求,无锁块要求;且支持先唤醒后等待
public static void main(String[] args) {Thread t1 = new Thread(() -> {System.out.println("线程1执行");LockSupport.park();System.out.println("线程1被唤醒");});t1.start();try {TimeUnit.SECONDS.sleep(1);} catch (Exception e) {e.printStackTrace();}new Thread(() -> {System.out.println("线程2执行");LockSupport.unpark(t1);}).start();
}

4.1 优点

为什么推荐使用LockSupport来做线程的阻塞与唤醒(线程间协同工作),因为它具备如下优点

  • 以线程为操作对象更符合阻塞线程的直观语义
  • 操作更精准,可以准确地唤醒某一个线程(notify随机唤醒一个线程,notifyAll唤醒所有等待的线程)
  • 无需竞争锁对象(以线程作为操作对象),不会因竞争锁对象产生死锁问题
  • unparkpark没有严格的执行顺序,不会因执行顺序引起死锁问题,比如「Thread.suspendThread.resume」没按照严格顺序执行,就会产生死锁

另外LockSupport还提供了park的重载函数,提升灵活性

  • void parkNanos(long nanos):增加了超时机制
  • void parkUntil(long deadline):加入超时机制(指定到某个时间点,1970年到指定时间点的毫秒数)
  • void park(Object blocker):设置blocker对象,当线程没有许可证被阻塞时,该对象会被记录到该线程的内部,方便后续使用诊断工具进行问题排查
  • void parkNanos(Object blocker, long nanos):设置blocker对象,加入超时机制
  • void parkUntil(Object blocker, long deadline):设置blocker对象,加入超时机制(指定到某个时间点,1970年到指定时间点的毫秒数)

建议使用时,传入blocker对象,至于超时根据业务场景选择

http://www.tj-hxxt.cn/news/101633.html

相关文章:

  • seo在网站制作bt磁力库
  • 网站被k了怎么做长沙网站定制公司
  • 在哪家网站做外贸比较好seo优化啥意思
  • 辽阳企业网站建设价格百度推广排名怎么做的
  • 制作网站需要哪些成本东莞推广
  • 房产中介网站建设的目的深圳seo排名优化
  • 深圳软件公司定制开发网页优化最为重要的内容是
  • 网站建设化学图片虞城seo代理地址
  • 萧山网站建设争锋网络怎样申请自己的电商平台
  • 找人代做网站注意事项青岛seo外包公司
  • 最低价网站建设海外网站
  • 做网站需要用到的软件企业网络营销业务
  • 网站制作注意事项目前常用的搜索引擎有哪些
  • 公司黄页怎么查seo关键词优化外包
  • 公安机关门户网站建设简报网站策划书怎么写
  • 做阿里网站卖东西赚钱吗哪个网站学seo是免费的
  • 一般做平面网站多少钱如何进行网站性能优化?
  • 公众号做成网站那样怎么做阿里云免费建站
  • 自建个人网站长春网站建设公司
  • 计算机科学与技术 开题报告 网站建设宁波seo关键词优化方法
  • 最好的手机资源网站推广软文案例
  • 做视频网站视频放在哪里哪个平台做推广效果好
  • 常州网站建设案例建站平台哪个好
  • 做网站被网警找seo优化培训多少钱
  • net淘宝网站开发的例子超级软文网
  • 网站建设与数据库管理资讯门户类网站有哪些
  • 婚纱网站建设目的优书网首页
  • 百度做网站搜索靠前免费b2b信息发布网站
  • php做网站导购昆明seo网站管理
  • 河南省建设厅网站官网平台宣传推广方案