sleep与wait区别
来源:互联网 发布:maven build java 编辑:程序博客网 时间:2024/05/21 14:02
1、每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!);wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度);
2、sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;
3、sleep()是线程线程类(Thread)的方法,调用会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复;wait()是Object的方法,调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,不再次获得对象锁才会进入运行状态;
public class TestSleepWait { private static class Thread1 implements Runnable{ @Override public void run() { synchronized (TestSleepWait.class){ System.out.println("into thread1......."); System.out.println("thread1 is going to wait......."); try { //TestSleepWait.class.wait(); Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread1 continue execute......."); System.out.println("over......"); } } } private static class Thread2 implements Runnable{ @Override public void run() { //notify方法并不释放锁,即使thread2调用了下面的sleep方法休息10ms,但thread1仍然不会执行 //因为thread2没有释放锁,所以Thread1得不到锁而无法执行 synchronized(TestSleepWait.class){ System.out.println("enter thread2 ..."); System.out.println("thread2 notify other thread can release wait status ..."); TestSleepWait.class.notify(); System.out.println("thread2 is sleeping ten millisecond ..."); try{ Thread.sleep(10); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println("thread2 is going on ..."); System.out.println("thread2 is being over!"); } } } public static void main(String args[]) { new Thread(new Thread1()).start(); try{ Thread.sleep(10); }catch(InterruptedException e){ e.printStackTrace(); } new Thread(new Thread2()).start(); }}
阅读全文
0 0
- sleep与wait区别
- sleep()与wait()区别
- sleep与 wait区别
- sleep与 wait区别
- sleep与wait区别
- wait与sleep区别
- sleep与wait的区别
- sleep与wait的区别
- sleep()与wait()的区别
- sleep与wait的区别
- sleep与wait的区别
- Sleep()与wait()的区别
- sleep与wait的区别
- java sleep与wait区别
- sleep与wait的区别
- sleep()与wait()的区别
- sleep与wait的区别
- sleep与wait的区别
- 关于有偿提供拼图响应式后台的通知
- ODBC学习笔记—SQLSetStmtAttr
- [数论]HDU 2504 又见GCD
- php curl模拟post请求和提交多维数组的示例代码
- 面向对象
- sleep与wait区别
- HTML中的5种空格表示
- python如何找到适合需求的库
- linux安装软件
- 数据结构之循环队列
- 写作建议
- html的img中使用SVG图片做SRC在本地测试可用但是上传服务器后不能显示问题解决 标签: SVGMIME TYPE不显示服务器设置 2016-05-21 13:49 2517人阅读 评论(0)
- Java环境的配置
- 华为OJ——求小球落地5次后所经历的路程和第5次反弹的高度