本文主要是介绍Java Thread(线程)sleep和wait的区别浅析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考文章:
- http://blog.csdn.net/liuzhenwen/article/details/4202967
- http://www.cnblogs.com/DreamSea/archive/2012/01/16/2263844.html
然后赶紧来总结一下sleep()和wait()的区别。
- sleep()是Thread类的静态方法, 而wait()是Object的方法
- sleep()不释放同步锁,wait()释放同步锁
- wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep没有此限制
- sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常IntrruptedException
下面我们通过一个实例验证一下两个方法的区别:
public class ThreadTest implements Runnable {int number = 10;public void firstMethod() {synchronized (this) {number += 100;System.out.println(number);}}public void secondMethod() throws Exception {synchronized (this) {/*** (休息2S,阻塞线程)* 以验证当前线程对象的机锁被占用时,* 是否被可以访问其他同步代码块*/// Thread.sleep(2000);this.wait(2000);number *= 200;}}@Overridepublic void run() {try {firstMethod();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {ThreadTest threadTest = new ThreadTest();Thread thread = new Thread(threadTest);thread.start();threadTest.secondMethod();}
}
当使用sleep()方法时, 输出结果是2100, 而使用wait()方法时, 结果是110。 大家可以想想为什么。
这篇关于Java Thread(线程)sleep和wait的区别浅析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!