多线程的等待唤醒机制
生活随笔
收集整理的這篇文章主要介紹了
多线程的等待唤醒机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一把鎖一把鑰匙。。就是等待跟喚醒要在同一鎖內/*
多線程的等待喚醒機制
wait();
noyify();*/
class Pes
{String name;String sex;boolean flag = false;
}
class Inp implements Runnable
{private Pes p;Inp(Pes p){this.p = p;}public void run(){int x=0;while(true){synchronized(p){if(p.flag)try{p.wait();}catch(Exception e){}if(x==0){p.name ="nike";p.sex = "man";}else{p.name = "mike";p.sex = "women";}x= (x+1)%2;p.flag= true;p.notify();}}}
}
class Out implements Runnable
{private Pes p;Out(Pes p){this.p = p;}public void run(){while(true){synchronized(p){if(!p.flag)try{p.wait();}catch(Exception e){}System.out.println(p.name+"..."+p.sex);p.flag = false;p.notify();}}}
}
class Test_12_3
{public static void main(String[] args){System.out.println("Hello Wolrd");Pes p = new Pes();Inp i = new Inp(p);Out o = new Out(p);Thread t1 = new Thread(i);Thread t2 = new Thread(o);t1.start();t2.start();}
}
//notifyAll();
/*
wait:
notify();
notifyAll();
都使用在同步中。因為要對持有監視器(鎖)的線程操作。
所以要使用在同步中,因為只有同步才具有鎖。
為什么這些操作線程的方法要定義Object類中呢?
因為這些方法在操作同步中線程時,都必須要標識它們所操作線程只有的鎖。
只有用一個鎖上的被等待線程。可以被同一個鎖上notify喚醒。
不可以對不同鎖中的線程進行喚醒。
也就是說。等待和喚醒必須是同一個鎖
*/
轉載于:https://blog.51cto.com/onlinestores/1395004
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的多线程的等待唤醒机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取站点的根目录和站点的根URL
- 下一篇: 模拟手机QQ滑动删除消息