美文网首页
关于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