wait, notify,notifyAll 小例子
来源:互联网 发布:淘宝网网页制作 编辑:程序博客网 时间:2024/06/18 08:33
一直只是知道notify,notifyAll,一个是换醒等待中的一个线程,一个是换醒多个线程。今天写一个小例子看看。
假设有一个线程类,里面有一个共享资源叫publicResource, 这个资源呢,我们是要加锁的,多个线程调用的时候,有的线程要先让步(wait()),之后再执行(等待它的notify)。即所有的线程都是要等待,要不要换醒就要看主程序了。
public class WaitNotifyTest3 {
public static void main(String args[]){
String publicResource ="publicResource";
Thread1 t1 = new Thread1(publicResource);
t1.start();
//线程调度睡一会,保证线程1是先跑的,该死的非要抛异长,包住先。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//启动线程二
Thread1 t2 = new Thread1(publicResource);
t2.start();
//线程调度睡一会。让线程2执行完。该死的非要抛异长,包住先。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (publicResource) {
publicResource.notify();
}
}
}
class Thread1 extends Thread{
private String publicResource ="publicResource";
public Thread1(String publicResource){
this.publicResource = publicResource;
}
public void run(){
for(int i=1;i<=10;i++){
System.out.println("Thread name: "+this.getName()+" " +i);
synchronized(publicResource){
if(i==5 ){
try {
publicResource.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
程序运行结果是:
Thread name: Thread-0 1
Thread name: Thread-0 2
Thread name: Thread-0 3
Thread name: Thread-0 4
Thread name: Thread-0 5
Thread name: Thread-1 1
Thread name: Thread-1 2
Thread name: Thread-1 3
Thread name: Thread-1 4
Thread name: Thread-1 5
Thread name: Thread-0 6
Thread name: Thread-0 7
Thread name: Thread-0 8
Thread name: Thread-0 9
Thread name: Thread-0 10
线程类,就是里面有个加锁的公共资源,每个线程用5次后都得等待,测试类,就是2个线程,第一个线程先跑,跑一会肯定要等待,再让第二个线程跑,跑一会也肯定要等待,然后调用notify()方法,就可以换醒其中一个线程,这里只换醒了线程1,所以线程1跑完了整个程序,线程二还是在等待状态呢,如果想要都换醒,只要改成notifyAll就行了。这里就像饭店上菜一样,每个桌子先上几个菜,轮流上菜,然后你就得等待了,等到再有新菜上来,再看看上哪桌,这里就是第二桌死活不上菜了,哈哈。
- wait, notify,notifyAll 小例子
- wait、notify、notifyAll
- notify();wait();notifyALL();
- wait() notify() notifyAll()
- wait、notify、notifyAll
- wait notify notifyAll
- wait(),notify(),notifyAll()
- wait(),notify(),notifyAll()
- wait,notify,notifyall
- sleep & wait | notify | notifyAll
- wait()与notify()/notifyAll()
- wait notify notifyall
- wait()、notify()、notifyAll()
- wait()和notify()/notifyAll()
- sleep & wait | notify | notifyAll
- wait notify notifyAll
- synchronized、wait、notify、notifyAll
- wait notify notifyall synchronized
- LOAD_DATA _INFILE和SELECT INTO OUTFILE说明
- pthread_cleanup_push() pthread_cleanup_pop()
- (3)LUA程序设计-表达式与语句(expression & statement)
- 网络等待indicator的界面设置
- 告警“需要有 dll 接口由 class“xxx”的客户端使用”的解释
- wait, notify,notifyAll 小例子
- iphone一些常识,去掉StatusBar,横屏,重力感应,主动切换反正,开机画面横屏,开机画面横屏。
- 求100万以内素数的快捷方法
- 继承,组合设计模式,
- iPhone入门 - UIAlertView用法
- 警惕:23种榨干时间和精力的生命水蛭
- 科学与佛学
- 有关TI DSP的一些东西(整理一些网络资源及手册资料)--外设寄存器和CPU控制寄存器、数据类型、中断的使用
- zoj 3622 Magic Number (找规律+打表)