关于Thread wait(int timeout),join(

2017-11-13  本文已影响0人  做个文艺的程序猿

关于wait(int timeout)

关于join(long millis)

 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;
            }
        }
    }

从源码我们可以看到,如果millis等于0,在调用这个方法的线程里,只有当该线程isAlive()==false已经的时候,才会跳出这个while循环,否则就会一直阻塞调用该方法的线程,如果大于0,除了当前线程isAlive()==false的时候,还有一个条件可以退出while循环,就是过了millis时间

上一篇 下一篇

猜你喜欢

热点阅读