参考文章:
- http://blog.youkuaiyun.com/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;
}
}
@Override
public 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。 大家可以想想为什么。