异常与锁的释放(synchronized )
来源:互联网 发布:php网站开发视频教程 编辑:程序博客网 时间:2024/06/06 18:04
http://wangxinchun.iteye.com/blog/1801057
synchronized 获取的锁,在方法抛出异常的时候会自动解锁
- package com.horizon.thread.synchronize;
- /**
- * function:主要演示了 synchronized 获取的锁,在方法抛出异常的时候会自动解锁
- * @author <a href="wangxinchun@yahoo.com.cn">新春.王</a>
- *
- */
- public class SynchronizeException extends Thread{
- private static volatile boolean flag = true;
- private A a;
- private B b;
- public static void main(String[] args) {
- A a = new A();
- B b = new B();
- new SynchronizeException(a,b).start();
- new SynchronizeException(a,b).start();
- }
- public SynchronizeException(A a,B b) {
- this.a = a;
- this.b = b;
- }
- @Override
- public void run() {
- if(flag){
- flag = false;
- a.a1();
- b.b1();
- }else{
- flag = true;
- b.b1();
- a.a1();
- }
- }
- }
- class A {
- public synchronized void a1() {
- // 此处可以设置断点,两个线程只有一个可以执行
- System.out.println(Thread.currentThread()+"a1");
- if(true){
- throw new NumberFormatException();
- }
- }
- }
- class B {
- public synchronized void b1() {
- System.out.println(Thread.currentThread()+"b1");
- }
- }
package com.horizon.thread.synchronize;/** * function:主要演示了 synchronized 获取的锁,在方法抛出异常的时候会自动解锁 * @author <a href="wangxinchun@yahoo.com.cn">新春.王</a> * */public class SynchronizeException extends Thread{private static volatile boolean flag = true;private A a;private B b;public static void main(String[] args) {A a = new A();B b = new B();new SynchronizeException(a,b).start();new SynchronizeException(a,b).start();}public SynchronizeException(A a,B b) {this.a = a;this.b = b;}@Overridepublic void run() {if(flag){flag = false;a.a1();b.b1();}else{flag = true;b.b1();a.a1();}}}class A {public synchronized void a1() { // 此处可以设置断点,两个线程只有一个可以执行System.out.println(Thread.currentThread()+"a1");if(true){throw new NumberFormatException();}}}class B {public synchronized void b1() {System.out.println(Thread.currentThread()+"b1");}}
注意:要想看到效果必须逐步调试按照特定的步骤才能保证看到效果
另外:class B 的方法是为了其他功能而设计的,请只需关注class A即可
- 异常与锁的释放(synchronized )
- java线程安全之synchronized锁重入及出现异常锁自动释放(五)
- synchronized 与IllegalMonitorStateException异常
- Informix如何释放异常的锁资源
- C++ 异常—堆栈的释放与清理
- synchronized(this)与synchronized(class)的区别
- Synchronized不一定是线程安全的吧?_wait释放同步锁
- 在Informix数据库中释放异常的锁资源
- 在Informix数据库中释放异常的锁资源
- 2.1.7出现异常的线程自动释放锁
- sqlite异常:链接close()和dispose()之后任然不能释放与db文件的连接
- synchronized和ReentrantLock异常退出时的锁处理
- synchronized关键字与锁的探究
- Synchronized与Lock锁的区别
- synchronized与static synchronized 的区别
- synchronized与static synchronized 的区别
- synchronized与static synchronized 的区别
- synchronized与static synchronized 的区别
- 增加SD卡fat32文件系统的读
- Extjs4 设置panel内部的gridpanel的滚动条
- mysql和sqlserver的order by 和group by和distinct引起的兼容性问题 max函数解决
- jsp中文乱码
- iphone ios app互相调用
- 异常与锁的释放(synchronized )
- 设计技巧33:从方法中获取信息 Collecting Parameter:集合参数,从方法中获取信息 容器比较常用
- android ClassicBT 概要介绍
- jrtplib下载地址
- ecshop 总结
- 《dive into python3》 笔记摘录
- SPOJ AMR12C Entmoot(二分+圆的面积交)
- 设计技巧34:利用另外一个类,影藏接口实现,防止向下造型
- ios 越狱