美文网首页
关于Thread wait(int timeout),join(

关于Thread wait(int timeout),join(

作者: 做个文艺的程序猿 | 来源:发表于2017-11-13 18:34 被阅读0次

关于wait(int timeout)

  • 如果timeout等于0,需要调用notify或者notifyAll才能继续执行wait()后面的代码,但如果timeoutd大于0,则过了timeout时间,就可以执行wait()后面的代码了

关于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时间

相关文章

网友评论

      本文标题:关于Thread wait(int timeout),join(

      本文链接:https://www.haomeiwen.com/subject/atttvxtx.html