首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

对synchronized的1点理解

2012-12-22 
对synchronized的一点理解对synchronized的一点理解.源程序来自马士兵老师的视频教程.下面这个程序中,num

对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变量进行赋值和读取.

热点排行