private?int?mInt=1;
for?(int?i?=?0;?i?<?50000;?i++)?{
????Thread?thread?=?new?Thread(new?Runnable()?{
????????@Override
????????public?void?run()?{
????????????Inner?inner?=?new?Inner();
????????????for?(int?i?=?0;?i?<?10000;?i++)?{
????????????????inner.t1();
????????????}
????????}
????});
????thread.start();
}
Log.i(TAG,?"安全鎖測(cè)試。。。"+mInt);
class?Inner?{
????public?void?t1()?{
????????synchronized?(this)?{
????????????mInt++;
????????}
????}
}為什么每次的結(jié)果都不一樣,不是同步鎖嗎???SynchronizedExp:?安全鎖測(cè)試。。。499970001SynchronizedExp: 安全鎖測(cè)試。。。499890001SynchronizedExp: 安全鎖測(cè)試。。。499922095SynchronizedExp: 安全鎖測(cè)試。。。499913016
1 回答

慕仰6620973
TA貢獻(xiàn)14條經(jīng)驗(yàn) 獲得超8個(gè)贊
自己發(fā)現(xiàn)原因了。。安全鎖,鎖的是對(duì)象不是代碼塊。??梢愿某蓆his.getClass(); 或者Inner?inner?=?new?Inner(); 放到線程外,把synchronized?(inner?)改成即可。
添加回答
舉報(bào)
0/150
提交
取消