zoukankan      html  css  js  c++  java
  • Java 多线程 sleep方法与wait方法的区别

      sleep方法会使线程暂停执行一段时间,wait方法会阻塞线程,直到被唤醒或等待时间超时。

      两者区别具体如下:

      1 原理不同

      sleep方法是Thread类的静态方法,使线程暂停执行一段时间,等到计时结束,该线程会自动“苏醒”。而wait方法是Object类的非静态方法,用于线程间的通信,使线程等待,直到其他线程调用notify方法(或notifyAll方法)时才被唤醒。也可以通过计时即设置超时时间来自动唤醒该线程。

      2 对锁的处理机制不同

      sleep方法不涉及线程间通信,不会释放锁。而wait方法会使线程释放占有的锁。

      3 使用区域不同

      sleep方法可以放在任何地方,而wait方法只能放在同步块中。

      4 是否需要捕获异常不同

      sleep方法必须捕获异常,而wait、notify和notifyAll这些方法不需要捕获异常。在线程睡眠过程中,其他对象可能调用它的interrupt方法,抛出InterruptedException。

      综上所述,因为sleep方法不会释放锁,容易产生死锁问题,所以推荐使用wait方法。

      参考资料

      《Java程序员面试笔试宝典》 P149-150

  • 相关阅读:
    面向对象-类
    模块04
    总结
    昨天的新的解决方法
    感冒了~ vs中py和vb实现一个小算法
    vs2015社区版不支持installshield
    网站被黑了
    2018/11/18(python)
    2018/11/14
    2018/11/12(python)
  • 原文地址:https://www.cnblogs.com/WJQ2017/p/8352960.html
Copyright © 2011-2022 走看看