|
这么说吧,Roger?
原帖由 silver_xie 于 2008-2-13 14:32 发表 ![]()
E:\>java Transfer
**********start synchronized(a)****************
**********start synchronized(b)****************
num = num + n==10+-5
num=5
a.get()=5 (thread1 的结果:doTransfer( r1, r2, 5 );)
num = num + n==10+5
num=15
b.get()=15
r1 = 5 r2 = 15(注意:main thread在这里执行了System.out.println(XXXXX);不幸打印了thread1的结果)main thread也可能在thread2后出现,那么就打印thread2,还有可能是thread3的。。。。
**********end synchronized(b)****************
**********start synchronized(a)****************
**********start synchronized(b)****************
num = num + n==15+-2
num=13
a.get()=13
num = num + n==5+2
num=7
b.get()=7 (thread2 的结果:doTransfer( r1, r2, 2 );)
**********end synchronized(b)****************
**********end synchronized(a)****************
**********end synchronized(a)****************
**********start synchronized(a)****************
**********start synchronized(b)****************
num = num + n==7+-1
num=6
a.get()=6
num = num + n==13+1
num=14
b.get()=14 (thread3的结果:doTransfer( r1, r2, 1 );)
**********end synchronized(b)****************
**********end synchronized(a)****************
重点是 对象a(r1),b(r2)互相不影响,也就是对象a的num只被a.add()影响,b的num只被b.add()影响
[ 本帖最后由 silver_xie 于 2008-2-13 16:06 编辑 ] |
|