生活随笔
收集整理的這篇文章主要介紹了
异常与锁的释放(synchronized )
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://wangxinchun.iteye.com/blog/1801057
synchronized 獲取的鎖,在方法拋出異常的時(shí)候會(huì)自動(dòng)解鎖
Java代碼 ?
package?com.horizon.thread.synchronize; ??????????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 獲取的鎖,在方法拋出異常的時(shí)候會(huì)自動(dòng)解鎖* @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() {// 此處可以設(shè)置斷點(diǎn),兩個(gè)線程只有一個(gè)可以執(zhí)行System.out.println(Thread.currentThread()+"a1");if(true){throw new NumberFormatException();}}
}class B {public synchronized void b1() {System.out.println(Thread.currentThread()+"b1");}
}
注意:要想看到效果必須逐步調(diào)試按照特定的步驟才能保證看到效果
另外:class B 的方法是為了其他功能而設(shè)計(jì)的,請(qǐng)只需關(guān)注class A即可
總結(jié)
以上是生活随笔為你收集整理的异常与锁的释放(synchronized )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。