必威体育Betway必威体育官网
当前位置:首页 > IT技术

超简单案例区分notify()和notifyAll()

时间:2019-08-12 13:43:11来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

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进程。 softupnotify.exe是什

分享到:

栏目导航

推荐阅读

热门阅读