synchronized 的用法?

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: 安全锁测试。。。499970001

SynchronizedExp: 安全锁测试。。。499890001

SynchronizedExp: 安全锁测试。。。499922095

SynchronizedExp: 安全锁测试。。。499913016

慕仰6620973
浏览 1254回答 1
1回答

慕仰6620973

自己发现原因了。。安全锁,锁的是对象不是代码块。。可以改成this.getClass(); 或者Inner inner = new Inner(); 放到线程外,把synchronized (inner )改成即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android
Java