使用waitnotify实现多线程同步

使用waitnotify实现多线程同步

ID:8999742

大小:31.50 KB

页数:4页

时间:2018-04-14

使用waitnotify实现多线程同步_第1页
使用waitnotify实现多线程同步_第2页
使用waitnotify实现多线程同步_第3页
使用waitnotify实现多线程同步_第4页
资源描述:

《使用waitnotify实现多线程同步》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、使用wait,notify实现多线程同步(转)2008-11-0622:47       笔注:本文来自网络       wait,notify,sleep,join这几个方法很常用,这里涉及到多线程和同步问题,这里稍微解释一下.1.wait和notify这两个方法都是Object中的方法,放在一块是因为他们关系非常密切.wait就是等待这个对象的同步锁,不过调用这个方法必须先获得这个对象的同步锁,就这一点很多人就搞晕了.这里先解释一下这两个方法,然后给出一个小例子说明.wait:等待对象的同步锁,需要获得该对象的同步锁才可以调用这个方法,否则后

2、收到一个IllegalMonitorStateException,这个是运行时异常.调用这个方法后,就放弃了这个同步锁了.如果不带参数的wait方法就只有等别人唤醒了,如果带一个参数的化就设置等待最长时间,过了这个时间即使没有人唤醒这个线程也不再等待了.notify:唤醒在等待该对象同步锁的线程(只唤醒一个,如果有多个在等待),但是notifyAll可以唤醒所有等待的线程,注意唤醒的时在notify之前wait的线程,之后的没有效果.这里举一个通俗的例子,两个人共有一个卫生间(每次只能一个人用),他们都要刷牙和方便,他们是这样约定的,轮流用,第一

3、个人先刷牙,然后第二个人刷牙...classSyn{       publicstaticvoidmain(String[]args)throwsException       {           TwoPeople.ONE.start();           TwoPeople.TWO.start();       }}classTwoPeopleextendsThread{   privateinti=0;   staticThreadONE=newTwoPeople(1);   staticThreadTWO=newTwoPeople

4、(2);   staticObjectwashroom=newObject();      privateTwoPeople(inti){this.i=i;}   publicvoidrun(){       synchronized(washroom){           try{               if(i==1){                   brush();//1                   washroom.wait();//2                   release();//6         

5、            washroom.notify();//7               }           else{                   brush();//3                   washroom.notify();//4                   washroom.wait();//5                   release();//8           }           }catch(InterruptedExceptione){e.printStackTrace(

6、);}       }   }   privatevoidbrush(){           System.out.println("People"+i+"isbrushing!");            try{Thread.sleep(2000);}catch(InterruptedExceptione){e.printStackTrace();}            //延迟两秒看效果            System.out.println("People"+i+"hasburshed!");    }    privatevoi

7、drelease(){            System.out.println("People"+i+"isreleasing!");            try{Thread.sleep(2000);}catch(InterruptedExceptione){e.printStackTrace();}            //延迟两秒看效果            System.out.println("People"+i+"hasreleased!");    }}sleep和join,说实在的这两个方法比wait和notify简单的多

8、.sleep:Thread的静态方法,当前线程休眠一段时间,时间到了再恢复可运行状态,时间到了不一定就执行吧,还得竞争CPU呢.join

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。