gpt4 book ai didi

java - 我正在学习 Synchronize() 无法弄清楚代码在这里是如何工作的

转载 作者:行者123 更新时间:2023-12-02 06:46:35 25 4
gpt4 key购买 nike

我创建了两个线程threadNewincrementer。这会产生 i count=2increment count=2 的结果。

我的想法:它应该产生i count=1increment count=2。有人可以研究一下并建议如何修复吗?

    public class StaticThreadTest {

//i = 0 for all instance of this class.
private static int i = 0;


/**
* @param args
*/
public static void main(String[] args) {

//There is no guarantee of thread execution in sequence.
StaticThreadTest st = new StaticThreadTest();
StaticThreadTest st1 = new StaticThreadTest();
st.threadNew.start();
st1.incrementer.start();

}

Thread threadNew = new Thread(new Runnable() {

@Override
public void run() {

synchronized (this) {
i++;
System.out.println("i count=" + i);
}
}
});

Thread incrementer = new Thread(new Runnable() {

@Override
public void run() {

synchronized (this) {
i++;
System.out.println("increment count="+i);
}
}
});

}

最佳答案

线程正在“this”上同步。但“this”对于两个线程来说是不同的。因此,实际上没有同步。为了使同步工作正常,所有线程必须有一些共同的东西来“锁定”。

在 StaticThreadTest 中创建静态字符串或对象并对其进行同步。例如

静态最终对象SYNC_ON_ME = new Object();

然后,在后面的代码中,使用

已同步(SYNC_ON_ME) {
...
}

关于java - 我正在学习 Synchronize() 无法弄清楚代码在这里是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18578921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com