sleep、wait争用锁
来源:互联网 发布:牙齿矫正知乎 编辑:程序博客网 时间:2024/06/05 06:45
线程在调用sleep()时,不放弃对对象的加锁,wait()会放弃,直到notify或是超过时间后重新获取对象锁。但是如果一个线程在先调用wait后紧接着调用了sleep,是否会重新获取对象锁呢?
写了个Demo,证实是可以的。
package demos.multiThreadDemo;/** * java中的sleep()和wait()的区别 * * @date 2013-12-10 */public class TestD { public static void main(String[] args) { new Thread(new Thread1()).start(); try { Thread.sleep(4000); System.out.println(System.currentTimeMillis() + ":sleep"); } catch (Exception e) { e.printStackTrace(); } new Thread(new Thread2()).start(); } private static class Thread1 implements Runnable { @Override public void run() { synchronized (TestD.class) { System.out.println("enter thread1..."); System.out.println("thread1 is waiting..."); try { // 调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池 TestD.class.wait(3000); System.out.println(System.currentTimeMillis() + ":wait"); } catch (Exception e) { e.printStackTrace(); } System.out.println("thread1 is going on ...."); System.out.println("thread1 is over!!!"); } } } private static class Thread2 implements Runnable { @Override public void run() { synchronized (TestD.class) { System.out.println("enter thread2...."); System.out.println("thread2 is sleep...."); // 只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。 // TestD.class.notify(); // ================== // 区别 // 如果我们把代码:TestD.class.notify();给注释掉,即TestD.class调用了wait()方法,但是没有调用notify() // 方法,则线程永远处于挂起状态。 try { // sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程, // 但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 // 在调用sleep()方法的过程中,线程不会释放对象锁。 Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); } System.out.println("thread2 is going on...."); System.out.println("thread2 is over!!!"); } } }}
enter thread1...thread1 is waiting...1497167069547:waitthread1 is going on ....thread1 is over!!!1497167070546:sleepenter thread2....thread2 is sleep....thread2 is going on....thread2 is over!!!
阅读全文
0 0
- sleep、wait争用锁
- wait & sleep
- sleep wait
- wait、sleep
- sleep wait 区别
- wait()和sleep()分析
- resume suspend wait sleep
- wait/sleep的区别
- Wait与Sleep
- linux shell sleep/wait
- wait notify sleep
- yield() sleep() wait() 区别
- sleep与wait差别
- sleep和wait区别
- wait、sleep、yield区别
- Thread, wait(), notify(), sleep()
- wait、sleep、interrupt、notify
- JAVA wait(), notify(),sleep
- OOP Unit01 对象和类(上)
- 计算机网络 运输层
- shell编程-流程控制-for循环
- Debian设置IP地址、网关、DNS
- 二分查找
- sleep、wait争用锁
- 写在大三末尾:10条不怎么重要的大学建议
- 【Deep Learning学习笔记】Efficient Estimation of Word Representations in Vector Space_google2013 标题:Effic
- SpringBoot简单入门
- 不擅长是因为“方法”不对-读后感
- I/O多路转接之poll
- Arranging Coins
- 从mysql中导出一列数据到txt
- Android launcher -- launcher源码修改 2