java util concurrent包 3 -线程间通信wait/notify和await/signal

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 01:06   26   0
1 wait和notify

当调用wait()方法时线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备

Object的方法:void notify(): 唤醒一个正在等待该对象的线程。void notifyAll(): 唤醒所有正在等待该对象的线程。notifyAll使所有原来在该对象上等待被notify的线程统统退出wait状态,变成等待该对象上的锁,一旦该对象被解锁,它们会去竞争。notify只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其它同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notify或notifyAll,它们等待的是被notify或notifyAll,而不是锁。



2 wait和notify实例 子线程循环10次,主线程循环100次。接着子线程循环10次,主线程循环100次。如此循环50次。摘自张孝祥老师线程视频源码。
public class TraditionalThreadCommunication{ public static void main(String[] args) {  final Business business = new Business();  new Thread(new Runnable() {   public void run()   {    for (int i = 1; i <= 50; i++)    {     business.sub(i);    }   }  }).start();  for (int i = 1; i <= 50; i++)  {   business.main(i);  } }}class Business{ private boolean bShouldSub= true; public synchronized void sub(int i) {  while (!bShouldSub)  {   try   {    this.wait();   }   catch (InterruptedException e)   {    e.printStackTrace();   }  }  for (int j = 1; j <= 10; j++)  {   System.out.println("sub thread sequence of " + j + ",loop of " + i);  }  bShouldSub = false;  this.notify(); } public synchronizedvoid main(int i) {  while (bShouldSub)  {   try   {    this.wait();   }   catch (InterruptedException e)   {    e.printStackTrace();   }  }  for (int j = 1; j <= 100; j++)  {   System.out.println("main thread sequence of " + j + ",loop of " + i);  }  bShouldSub = true;  this.notify(); }}


3 Condition实例

public class Condition1Test{ public static void main(String[] args) f6737732F#646#7732WvfFS7732WvC7%67V"b3c732VW"#&VV6b3c732Wvs7&VV6FFb3c6t6F6FFb3c6t6F6FFb3c6t6F732V732Wv&37732WvC7732F#77732&#7732WvC77766732Wv7732Wv7%67V"b3c732VW"#732Wv76FvB732WvF67''WFVDW6WFRF6G&6R732Wv#7732WvC7b3c732VW"#fb3c732VW"#7b3C3b3C377FV&7732G&3C&VB6WVV33C7b3C3b3C3732G&3C33C7b3C3%67V"b3c732VW"#6F6v732Wv766732V732Wv&37732WvC7732F###77732&#7732WvC77766732Wv7732Wv7%67V"b3c732VW"#732Wv76FvB732WvF67''WFVDW6WFRF6G&6R732Wv#7732WvC7b3c732VW"#fb3c732VW"#7b3C3b3C377FV&7732G&3C7V#"F&VB6WVV33C7b3C3b3C3732G&3C33C7b3C3%67V"b3c732VW"#6F6v732Wv766732V732Wv&37732WvC7732F##377732&#7732WvC77766732Wv7732Wv7%67V"b3c732VW"#732Wv76FvB732WvF67''WFVDW6WFRF6G&6R732Wv#7732WvC7b3c732VW"#fb3c732VW"#7b3C3b3C377FV&7732G&3C7V#2F&VB6WVV33C7b3C3b3C3732G&3C33C7b3C3%67V"b3c732VW"#6F6v732Wv7666&S#
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP