WEB开发网
开发学院WEB开发Jsp wait,notify,sleep,join和线程同步问题(续) 阅读

wait,notify,sleep,join和线程同步问题(续)

 2008-01-05 20:01:59 来源:WEB开发网   
核心提示:昨天没有时间写完这篇,今天补上,前面只说明了wait和notify这两个方法,这里讨论一下sleep和join,说实在的这两个方法比wait和notify简单的多.http://blog.csdn.net/treeroot/archive/2004/11/10/175508.aspxsleep:Thread的静态方法,

昨天没有时间写完这篇,今天补上,前面只说明了wait和notify这两个方法,这里讨论一下sleep和join,说实在的这两个方法比wait和notify简单的多.
http://blog.csdn.net/treeroot/archive/2004/11/10/175508.aspx

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

join:这个方法其实就是非凡的wait,wait方法一般都需要别人notify(当然也可以设置超时),但是join方法就不需要别人notify了,一直等到这个线程死亡(就相当于这个线程临时前告诉那些在等它的人:你们进来吧!)

本人不是很会举例子,还是两个人公用一个卫生间吧,这回不刷牙了,改洗澡吧,总不能两个人同时洗澡吧!就算可以,这里假设不可以吧.情况时这样的:A在洗澡,B要等。

第一种情况:
B很聪明的,A洗澡可能要20分钟到1小时,我就先睡10分钟看看好了没有,没有好就再睡10分钟,最多多等10分钟而已吧.

class Syn
{
     public static void main(String[] args) throws Exception
    {
        Thread a=new Bathing();
        a.start();
        //B
        int time=0;
        while(a.isAlive()){
            Thread.sleep(10000);
            time+=10;
            System.out.PRintln("B has waited "+time+" minutes");
        }
        System.out.println("B can bath now!");
    }
}

class Bathing extends Thread
{
    public void run(){
        bathing();
    }
    private void bathing() {
        System.out.println("A is bathing !");
        try{Thread.sleep(20000);}catch(InterruptedException e){e.printStackTrace();}
        //延迟20秒看效果
        System.out.println("A has bathed !");

Tags:wait notify sleep

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接