美文网首页
sleep vs wait

sleep vs wait

作者: 划水者 | 来源:发表于2019-03-06 08:32 被阅读0次

sleep是Thread持有的方法,而wait是Object类持有的对象;

sleep在持有锁的过程中不会释放锁,而wait在持有锁的过程中会释放锁;

实验代码:

分别注释掉红框中的俩行代码,运行看实验结果,如果注释掉Thread.sleep(2000),最终的运行结果为110,如果注释掉this.wait(2000),最终的运行结果为2100;下面来分析下这段代码的运行原理,main()方法中实例化ThreadTest并启动该线程,然后调用该线程的一个方法(secondMethod()),

因为在主线程中调用方法,所以调用的普通方法secondMethod())会先被执行(但并不是普通方法执行完毕该对象的线程方法才执行,

普通方法执行过程中,该线程的方法也会被执行,他们是交替执行的,只是在主线程的普通方法会先被执行而已),

所以程序运行时会先执行secondMethod(),而secondMethod()方法代码片段中有synchronized block,

因此secondMethod方法被执行后,该方法会占有该对象机锁导致该对象的线程方法一直处于阻塞状态,不能执行,直到secondeMethod释放锁;

使用Thread.sleep(2000)方法时,因为sleep在阻塞线程的同时,并持有该对象锁,所以该对象的其他同步线程(secondMethod())

无法执行,直到synchronized block执行完毕(sleep休眠完毕),secondMethod()方法才可以执行,因此输出结果为number*200+100;

使用this.wait(2000)方法时,secondMethod()方法被执行后也锁定了该对象的机锁,执行到this.wait(2000)时,

      该方法会休眠2S并释当前持有的锁,此时该线程的同步方法会被执行(因为secondMethod持有的锁,已经被wait()所释放),因此输出的结果为:number+100

相关文章

  • sleep vs wait

    sleep是Thread持有的方法,而wait是Object类持有的对象; sleep在持有锁的过程中不会释放锁,...

  • sleep() wait() 区别

    sleep() wait() 区别 wait()和sleep()最大的不同在于:wait()会释放对象锁,而sle...

  • Java中wait和sleep方法有什么区别?

    参考Java中wait和sleep方法的区别java中的 sleep() 和 wait() 有什么区别? wait...

  • 线程考点

    1、sleep和wait的区别 sleep是Thread类的方法、wait是Object类中定义的方法sleep方...

  • 【进阶】 wait sleep

    wait sleep 区别 不同: wait会释放锁,而sleep不会释放锁 wait只能在同步方法和同步代码块中...

  • 面试相关之 Java 并发

    1. sleep()和wait()的区别?参考回答:sleep()来自Thread类;wait()来自Object...

  • 线程——wait和sleep

    wait()和sleep()的区别 sleep(): 1、sleep()是Thread类的方法; 2、sleep(...

  • 线程各个方法区别

    sleep与wait 区别 对于sleep()方法,属于Thread类中的。而wait()方法,则是属于 Obje...

  • wait和sleep的区别

    首先确定下wait和sleep的属于的对象,wait属于Object,sleep属于Thread。 线程调用sle...

  • Java多线程

    Java中的sleep()和wait()的区别 sleep属于Thread类的静态方法。而wait()方法,则是属...

网友评论

      本文标题:sleep vs wait

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