【发布时间】:2018-01-29 15:51:26
【问题描述】:
所以我目前正在尝试理解并发性。在我的代码中,我创建了一个具有 int var 的类“Summer”。它的方法 sumUP 将 var 增加 2000000。 我的第二个类是一个以 Summer 作为参数并调用其方法 sumUp 的线程。 这两个对象都在我的主线程中初始化并启动。
经过我的理解,结果应该是任意的,基本上是给我的随机数。主线程和第二线程创建自己的变量副本并独立更改它。
我的代码根本不是线程安全的,没有易失性,没有同步,但答案始终是 4000000。你能解释一下我的错误还是 eclipse 为我修复了线程安全?在此先感谢:)
public class Main {
public static void main(String[]agrs) {
Summer summer = new Summer();
Thread t1 = new Thread(new MyRunnable(summer));
summer.sumUp();
t1.start();
}
}
public class MyRunnable implements Runnable {
private Summer summer;
public MyRunnable(Summer summer) {
this.summer = summer;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " hat gestartet R");
summer.sumUp();
System.out.println("Thread val =" + summer.val);
}
}
public class Summer {
public int val;
public void sumUp() {
for(int i=0; i<2000000; i++) {
increment();
}
System.out.println("MainThread val = " + val);
}
private void increment() {
val++;
}
}
(我知道 var 应该是私有的,但这样更快:))
【问题讨论】:
-
这与 Eclipse 无关,它只是您的开发环境。这个问题是关于 Java 是如何工作的。
标签: java multithreading concurrency