notifyall
notify()唤醒一个被挂起的线程,notifyAll唤醒所有被挂起的线程。
代码思想:实现一个计数器,当只剩一个线程没有被挂起时,一次性唤醒所有线程!
public class TestThread implements Runnable{
private Wait wait = new Wait(3);
@Override
public void run() {
wait.does();
}
public static void main(String[]args) {
TestThread tt = new TestThread();
Thread a = new Thread(tt);
Thread b = new Thread(tt);
Thread c = new Thread(tt);
Thread d = new Thread(tt);
a.start();b.start();c.start();d.start();
}
}
class Wait{
private int counter;//剩余多少个线程未被挂起,当只剩下一个线程的时候,唤醒所有线程
private int wake = 0;//唤醒了多少个线程
public Wait(int counter) {
this.counter = counter;
}
public synchronized void does() {
if(counter>0) {
System.out.println("wait"+counter);
try {
counter--;//逐个挂起线程
this.wait();
System.out.println(++wake);
} catch (InterruptedException e) {
e.printstacktrace();
}
}else {
this.notifyAll();
}
}
}
输出结果:
如果改成notify(),则只能唤醒一个线程,输出结果:
相关阅读
Android ListView优化之局部刷新(更新)(非notifyDataSetC
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53020164 【DylanAndroid的csdn博客】 在Android开
windows程序托盘图标以及消息提示--基本知识(NOTIFYICO
首先介绍一下基本知识: NOTIFYICONDATA结构体,语法如下: typedef struct _NOTIFYICONDATA { DWORD cbSize; HWND hWnd; UINT uID; UI
notifyDataSetChanged和notifyDataSetInvalidated区别
notifyDataSetChanged和notifyDataSetInvalidated区别以及观察者模式的使用 看Observer和Observable的时候,爬了下Listview的
今天小编来介绍一个新的进程项,softupnotify.exe是什么进程,下面小编就来给大家讲解softupnotify.exe进程。 softupnotify.exe是什