对于初学者来说,下面这个例子是一个很是常见的错误。 /**
G& E, o' E- b8 z q% y3 T * 线程A: 轮回50次后期待并抛却锁,让线程B执行。
" N* S% T' E3 l */. h4 Q6 M2 `! \6 h8 ]0 y0 n, e
class ThreadA extends Thread{
1 l3 N& W% Z4 R2 X: r //线程同步的公共数据区
9 g0 T5 d: O2 p5 U7 e, C Object oa=null;
8 Y, ?( l. P2 J7 @6 P. f6 L* h ThreadA(Object o){, J3 x1 Z" X# L
this.oa=o;6 _; Z8 V* W) U7 }* E" Z8 e) q3 s
}3 b4 b) Z7 [# p3 @ F
//线程A执行逻辑# }( y) {7 c3 q0 n. }
public void run(){
- T7 Q/ T' ?* q1 [& j; | //线程同步区域,需要申请公共数据的锁
; v2 `1 g, L* W* |! {7 B/ [3 J! ? synchronized(oa){
, i3 V _3 Z; b1 s2 _' ~* p) s6 M- O3 F System.out.println("ThreadA is running......");
( U+ D" V1 o" ^, {. \* H" g& A( I- D7 u# {6 W
for(int i=0;i |