3.1.4在notify方法执行完之后不立即释放锁
2017-10-15 23:39
239 查看
package demo; /** * Created by sunyifeng on 17/10/15. */ public class Service { // wait方法 public void waitMethod(Object lock) { try { synchronized (lock) { System.out.println("开始等待,线程名称:"+ Thread.currentThread().getName()); lock.wait(); System.out.println("结束等待,线程名称:"+ Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); } } // notify方法 public void notifyMethod(Object lock) { try { synchronized (lock) { System.out.println("开始通知,线程名称:" + Thread.currentThread().getName()); lock.notify(); Thread.sleep(5000); System.out.println("结束通知,线程名称:" + Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); } } }
package demo; /** * Created by sunyifeng on 17/10/15. */ public class MyThread extends Thread { private Object lock; public MyThread(Object lock) { super(); this.lock = lock; } @Override public void run(){ Service service = new Service(); service.waitMethod(lock); } }
package demo; /** * Created by sunyifeng on 17/10/15. */ public class NotifyThread1 extends Thread { private Object lock; public NotifyThread1(Object lock) { super(); this.lock = lock; } @Override public void run(){ Service service = new Service(); service.notifyMethod(lock); } }
package demo; /** * Created by sunyifeng on 17/10/15. */ public class NotifyThread2 extends Thread { private Object lock; public NotifyThread2(Object lock) { super(); this.lock = lock; } @Override public void run(){ Service service = new Service(); service.notifyMethod(lock); } }
package demo; /** * Created by sunyifeng on 17/10/15. */ public class Run { public static void main(String[] args) { Object lock = new Object(); // MyThread myThread = new MyThread(lock); myThread.start(); // NotifyThread1 notifyThread1 = new NotifyThread1(lock); notifyThread1.start(); // NotifyThread2 notifyThread2 = new NotifyThread2(lock); notifyThread2.start(); } }
运行结果:
开始等待,线程名称:Thread-0
开始通知,线程名称:Thread-1
结束通知,线程名称:Thread-1
结束等待,线程名称:Thread-0
开始通知,线程名称:Thread-2
结束通知,线程名称:Thread-2
程序分析:
方法notify()执行后不立即释放锁,必须等到所在同步块执行完之后才释放锁。
相关文章推荐
- 关于Activity调用Ondestroy()方法之后内存管理器为什么没有释放占用资源
- java中等待一些线程执行完之后,再去执行别的方法(后者需要使用前者返回的结果)
- Linux系统误操作执行:chmod -R 777 / 之后 修复方法
- 关于IE抛出"不能执行已释放 script 的代码"的解决方法
- button移动(或执行动画)之后无法响应点击事件的解决方法
- 程序员七宗罪 误区一:注重理论,轻视实践:学习新知识钱想把这方面的理论全部掌握后再去实践。========> 大错特错 解决方法:在了解理论之后,就立即去实践,实践驱动理论的学习,这样掌握理论才更加扎
- 关于Hibernate save方法执行之后得到的id与数据库中实际存入值的id不一致的问题
- 隐知识:reloadData 方法之后,view并不会立即更新其contentSize
- Flash耗时较长的方法执行完之后再执行另一个方法 as3.0
- thinkphp在某种方法之前与之后执行的方法
- Android下Activity结束(finish())之后没有释放内存问题的解决方法
- 项目启动 spring初始化bean之后执行指定方法
- deelx执行replace方法后释放字符串例子
- 在main函数执行之前和执行之后执行的方法
- 调用System.gc没有立即执行的解决方法
- Android之Activity结束(finish())之后没有释放内存问题的解决方法
- 关于jquery的ajax方法之后代码和内部代码执行问题
- java运行dos命令方法及不立即执行的解决
- iOS 注册通知之后多次执行响应方法
- 安装了Mathtype之后出现“打开对话框命令无法执行”解决方法!