方法join(long)与方法sleep(long)的区别

来源:互联网 发布:mac桌面壁纸软件 编辑:程序博客网 时间:2024/04/29 02:33

1.wait()方法与notify()方法

wait()方法执行后,锁会被释放,而notify()方法执行后,不释放锁。

2.方法join(long)与方法sleep(long)的区别

方法join(long)的功能是在内部使用wait(long)方法实现的,由于wait(long)方法释放锁,所以join(long)释放锁。

public final synchronized void join(long millis)    throws InterruptedException {        long base = System.currentTimeMillis();        long now = 0;        if (millis < 0) {            throw new IllegalArgumentException("timeout value is negative");        }        if (millis == 0) {            while (isAlive()) {                wait(0);            }        } else {            while (isAlive()) {                long delay = millis - now;                if (delay <= 0) {                    break;                }                wait(delay);                now = System.currentTimeMillis() - base;            }        }    }

从源码可以看出,当执行wait(long)方法后,当前线程的锁被释放,其他线程便可以调用次线程的同步方法了。而Thread.sleep(long)方法却不释放锁。

1 0
原创粉丝点击