java线程基础巩固---wait和sleep的本质区别是什么,深入分析(面试常见问题)

Posted cexo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程基础巩固---wait和sleep的本质区别是什么,深入分析(面试常见问题)相关的知识,希望对你有一定的参考价值。

对于wait和sleep貌似都会阻塞线程,但是它们确实是很大的区别的,所以下面一点点来探讨:

  • 区别一、Sleep()是线程里面的方法,而Wait()是Object类的方法。
    这个比较简单,直接看代码便知:

  • 区别二、sleep()方法不需要被notify唤醒,而wait()则需要【当然wait(10)这样的情况除外】。
    这个比较容易理解,就不多解释了。
  • sleep()使用时不需要使用syncronized加上同步锁,但是wait()需要。
    这个做一下实验就明白了:

    嗯~~调用sleep()时是不需要加同步块的,接下来再看wait():

    好接着解决这个异常:
  • sleep()时不会释放同步锁,但是wait()会释放。
    这个不太好理解,下面做实验验证一下:

    而当线程一sleep()结束之后,线程二就抢到锁了。

    好,接下来换成wait()再看结果:

    看见木有,等于两个线程同时执行了,也就是在线程一wait()期间,其锁就被释放可以被其它线程获得了。

以上是关于java线程基础巩固---wait和sleep的本质区别是什么,深入分析(面试常见问题)的主要内容,如果未能解决你的问题,请参考以下文章

Java学习---面试基础知识点总结

线程中wait 和sleep 的区别

Java多线程系列---“基础篇”14之 wait,sleep,join,yield,park,unpark,notify等通信机制对比

Java 基础面试题 汇总

线程之sleep(),wait(),yield(),join()等等的方法的区别

java中yeild()方发,wait()方法和sleep()有啥区别