【发布时间】:2017-10-28 07:57:59
【问题描述】:
在下面的代码中,线程运行 increment 方法后,它会将值 2 打印到控制台。该值不应该为 1,因为该方法将其递增 1?
class TestSync implements Runnable {
private int balance;
public void run() {
for(int i = 0; i < 50; i++){
increment();
System.out.println(Thread.currentThread().getName() + " balance after increment is " +balance);
}
}
private synchronized void increment() {
int i = balance;
balance = i + 1;
// System.out.println(balance);
}
}
公共类 TestSyncTest {
public static void main(String[] args) {
TestSync job = new TestSync();
Thread a = new Thread(job);
Thread b = new Thread(job);
a.setName("Thread A");
b.setName("Thread B");
a.start();
b.start();
}
}
【问题讨论】:
-
如果两个线程在它们中的任何一个打印出值之前递增值怎么办?
-
尝试注释掉现有的
System.out.println并取消注释您现在已注释掉的那个。 -
你能检查我的答案吗?
标签: java multithreading jvm synchronization thread-synchronization