博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的Object.wait(long)在等待时间过去后会继续往后执行吗
阅读量:4126 次
发布时间:2019-05-25

本文共 1831 字,大约阅读时间需要 6 分钟。

Java的Object.wait(long)在等待时间过去后会继续往后执行吗

Object.wait(long)方法相比于wait,多了个等待时长,那么当等待时长过去后,线程会继续往下执行吗?

单个线程执行

多个线程并发执行

public class ThreadWaitDemo {

public static final int WAIT_IN_SECONDS = 2;public static final int NOTIFY_IN_SECONDS = 6;public static void main(String[] args) throws InterruptedException {    ThreadWaitDemo threadWait = new ThreadWaitDemo();    Thread a = new Thread(threadWait::justWaitAndPrint, "t1");    Thread b = new Thread(threadWait::justNotify, "t2");    a.start();    //  ① 先注释这段,让t1自己执行    b.start();}public synchronized void justWaitAndPrint()  {    try {        System.out.println(Thread.currentThread().getName() + ": I am in");        System.out.println(Thread.currentThread().getName() + ": I am gonna wait");        long start = System.currentTimeMillis();        wait(WAIT_IN_SECONDS * 1000);        // 如果时间过了就可以解除等待状态的话,那么这里的时间间隔就会接近2s        System.out.println("wait end " + (System.currentTimeMillis() - start) / 1000.0 + "seconds");    } catch (Exception e) {        System.out.println(Thread.currentThread().getName() + ": Oops, something bad happen " + e);    }    System.out.println(Thread.currentThread().getName() + ": I am out");}public synchronized void justNotify()  {    try {        TimeUnit.SECONDS.sleep(NOTIFY_IN_SECONDS);        System.out.println(Thread.currentThread().getName() + ": I am in");    } catch (Exception e) {        System.out.println(Thread.currentThread().getName() + ": Oops, something bad happen " + e);    }    System.out.println(Thread.currentThread().getName() + ": I am out");}

}

第一种情况下,运行结果
t1: I am in
t1: I am gonna wait
wait end 2.004seconds
t1: I am out

第二种情况下,运行结果

t1: I am in
t1: I am gonna wait
t2: I am in
t2: I am out
wait end 6.002seconds // 等待时间会随NOTIFY_IN_SECONDS变化
t1: I am out

结论:wait(long)在无锁竞争情况下,在等待时间过去后就直接重新获取锁,往后执行;但是在竞争条件下,都会等获取到锁了才可以往下执行

转载地址:http://hehpi.baihongyu.com/

你可能感兴趣的文章
菜单树
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
JAVA数据类型
查看>>
【Python】学习笔记——-6.2、使用第三方模块
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>