读书人

对synchronized的1点理解

发布时间: 2012-12-22 12:05:05 作者: rapoo

对synchronized的一点理解
对synchronized的一点理解.源程序来自马士兵老师的视频教程.

下面这个程序中,num变量刚开始的值为0, t1执行num++后, num变为1,然后t1开始休眠,
t2开始执行,也执行num++,将num变为2, t1休眠完毕,读取到的num变量值为2,t2休眠完后读取到的num变量值为2, 于是就有了类似于"丢失更新"的问题.


上述代码运行结果:

运行结果是:
1111b=1111

我个人的理解是, synchronized只是锁住了语句,使得某一段代码在任意时刻只被一个线程执行, 它并不能锁住这段代码内所涉及的变量资源.
在TongBuTest.java中,加上synchronized关键字后,num++被锁住,t1执行完并输出num值之后才允许t2执行add方法.
在TT.java中, m1方法有synchronized关键字,m1方法体内的所有代码被锁住,但是b这个变量并没有被锁住,所以允许m2方法对b变量进行赋值和读取.

读书人网 >编程

热点推荐