【发布时间】:2021-06-04 09:17:49
【问题描述】:
如果我在这里注释 t1.join,t2.join,下面的代码没有给出 counter=200 的结果,我假设我们在 increment() 方法中有 synchronized 关键字,这会让一个线程允许进入 increment() 方法,假设 t1 被允许,然后 t1 使计数器变为 100,然后 t1 完成,然后 t2 将获得锁并获取已更新的计数器值 100,然后开始从 101 递增到 200 但如果我评论加入方法然后该程序无法正常工作 预计
非常感谢您抽出宝贵时间帮助我理解这一点
public class InterthreadExp1 {
private static int counter =0;
public static synchronized void increment() {
counter++;
}
public static void process() {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
increment();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
increment();
}
}
});
t1.start();
t2.start();
/*
* try { t1.join(); t2.join(); } catch (InterruptedException e) {
* e.printStackTrace(); }
*/
}
public static void main(String[] args) {
process();
System.out.println("Couter value "+counter);
}
}
【问题讨论】:
-
同步在哪里?
-
您的代码中没有
synchronized方法/块。 -
一定是
synchronized不起作用的原因;) -
对不起,我忘了补充。现在我已经添加了
-
@BalanjaneyuluP 您想在两个线程都完成时打印结果。因此,将
t1.start(); t2.start()更改为t1.start(); t2.start(); t1.join(); t2.join();。
标签: java multithreading