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

个人网站设计的意义优化关键词规则

个人网站设计的意义,优化关键词规则,怎么搭建网页游戏私服,wordpress调用文章上级栏目名字线程间通信是指多个线程之间通过某种机制进行协调和交互,例如:线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中有以下三种实现线程等待的手段 : Object 类提供的 wait(),notify() 和 notifyAll() 方法;C…

线程间通信是指多个线程之间通过某种机制进行协调和交互,例如:线程等待和通知机制就是线程通讯的主要手段之一。

在 Java 中有以下三种实现线程等待的手段 :

  1. Object 类提供的 wait(),notify() 和 notifyAll() 方法;
  2. Condition 类下的 await(),signal()  和 signalAll() 方法;
  3. LockSupport 类下的 park() 和 unpark() 方法。

第一种方式的代码示例 : 

Object lock = new Object();
new Thread(() -> {synchronized (lock) {try {System.out.println("线程1 -> 进入等待");lock.wait();System.out.println("线程1 -> 继续执行");} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程1 -> 执行完成");}
}).start();Thread.sleep(1000);
synchronized (lock) {// 唤醒线程System.out.println("执行 notifyAll()");lock.notifyAll();
}

第二种方式的代码示例 :

// 创建 Condition 对象 (lock 可创建多个 condition 对象)
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
// 加锁
lock.lock();
try {// 一个线程中执行 await()condition.await();// 另一个线程中执行 signal()condition.signal();
} catch (InterruptedException e) {e.printStackTrace();
} finally {lock.unlock();
}

上述两种线程间通信的方式其实是差不多的,只是 Condition 类它可以创建出多个对象。那为什么有了 Object 类的 wait 和 notify 的方式,还需要 condition 来干嘛呢 ?

答 :因为 Object 类的 wait 和 notify 只适用于一个任务队列,而 Condition 类的 await 和 signal 适用于多个任务队列,在多个任务队列的情况下,使用 Object 类的 wait 和 notify 可能会存在线程饿死的问题。

比如以上这种生产者消费者模型,当生产者,消费者(阻塞式的)都有多个的时候,并且此时任务队列里面没有任务了,所以消费者就会进入休眠状态,此时生产者需要做两件事情 : 

  1. 将任务推送到任务队列
  2. 唤醒线程

【问题所在】

①  此时如果使用 Object 类提供的 wait 和 notify,而唤醒线程是存在两种可能的:

1)唤醒了消费者 

2)唤醒了生产者

        如果是唤醒了生产者,那就出问题了,当生产者这边代码执行完了就结束了,消费者这边永远不会去消费队列里的任务了,这就会导致线程饥饿问题。

②  而 Condition 类因为可以被创建多个,所以可以使用两个 Condition 对象,一个指定唤醒生产者,一个指定唤醒消费者,这样就不会出现线程饥饿了。

【结论】

所以 Condition 类的 await 和 signal 是对 Object 类的 wait 和 notify 的一个补充,它解决了 Object 类种分组不明确的问题。

第三种方式的代码示例:

public static void main(String[] args) {Thread t1 = new Thread(() -> {LockSupport.park();System.out.println("线程1被唤醒");},"线程1");t1.start();Thread t2 = new Thread(() -> {LockSupport.park();System.out.println("线程2被唤醒");},"线程2");t2.start();Thread t3 = new Thread(() -> {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("唤醒线程2");LockSupport.unpark(t2);},"线程3");t3.start();
}

LockSupport 类又是对 Condition 类的一个补充,它可以指定唤醒某一个线程,它解决了前两种方式不能随机指定唤醒线程的问题。

具体使用哪一种,还是要根据业务来进行选择~

http://www.dt0577.cn/news/38917.html

相关文章:

  • 为什么要做网站建设邹平县seo网页优化外包
  • 成都商城网站建设手机登录百度pc端入口
  • 淄博政府做网站哪家好2022年新闻摘抄简短
  • 住房和建设执业资格注册中心网站百度指数总结
  • iis6cgi php网站缓存seo入门教程
  • 网站团队介绍网站网络推广公司
  • logo免费设计在线生成app福建seo快速排名优化
  • 招商网站平网站平台广州seo优化
  • 在线制作手机网站今天的新闻 联播最新消息
  • 宁波市网站制作百度推广seo效果怎么样
  • 一个服务器可以备案几个网站吗猪八戒网接单平台
  • 手机网站怎么建四川省最新疫情情况
  • 中英版网站系统热点事件
  • 晚上必看正能量网站短视频网络营销方式哪些
  • 做贺卡网站杭州百度人工优化
  • 做旅游网站的yi谷歌排名规则
  • 免费的工程网站校园推广的方式有哪些
  • 青海政府网站建设公司个人推广网站
  • 建一个商业网站要多少钱推广网站的公司
  • 旅游网站的规划与建设开题报告交换链接或称互惠链接
  • linux wordpress 伪静态seo策略有哪些
  • cookie做网站登录电商平台
  • 做网站的计划概要优秀网站设计案例
  • 东莞做网站哪家公司好seo建站要求
  • 白云网站 建设信科网络免费制作网站的软件
  • 福田住房和建设局网站百度推广优化中心
  • 东莞长安网站制作网站seo优化技能
  • 柳州网络网站建设北京seo排名收费
  • cms做网站容易不推广软文代发
  • 用java做网站还是html东方网络律师团队