关于Thread wait(int timeout),join(long millis)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.解决信号量丢失和假唤醒 public class MyWaitNotify3{ MonitorObject m...
    Q罗阅读 924评论 0 1
  • 第三章 Java内存模型 3.1 Java内存模型的基础 通信在共享内存的模型里,通过写-读内存中的公共状态进行隐...
    泽毛阅读 4,398评论 2 22
  • 一、进程和线程 进程 进程就是一个执行中的程序实例,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。...
    阿敏其人阅读 2,626评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 【怦然心动】20170417学习力践行day33 1,画日记。今天的日记内容包括米饭,不让打秋千,拉臭。苹果画了一...
    怦然心动818阅读 149评论 0 0