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, "安全锁测试。。。"+mInt);
class Inner {
public void t1() {
synchronized (this) {
mInt++;
}
}
}为什么每次的结果都不一样,不是同步锁吗???SynchronizedExp: 安全锁测试。。。499970001SynchronizedExp: 安全锁测试。。。499890001SynchronizedExp: 安全锁测试。。。499922095SynchronizedExp: 安全锁测试。。。499913016
1 回答
慕仰6620973
TA贡献14条经验 获得超8个赞
自己发现原因了。。安全锁,锁的是对象不是代码块。。可以改成this.getClass(); 或者Inner inner = new Inner(); 放到线程外,把synchronized (inner )改成即可。
添加回答
举报
0/150
提交
取消