【发布时间】:2017-06-21 21:54:08
【问题描述】:
我有一个 String 和 ThreadPoolExecutor 来改变这个 String 的值。只需查看我的示例:
String str_example = "";
ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10, 30, (long)10, TimeUnit.SECONDS, runnables);
for (int i = 0; i < 80; i++){
poolExecutor.submit(new Runnable() {
@Override
public void run() {
try {
Thread.sleep((long) (Math.random() * 1000));
String temp = str_example + "1";
str_example = temp;
System.out.println(str_example);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
所以在执行这个之后,我得到了类似的东西:
1
11
111
1111
11111
.......
所以问题是:如果我的 String 对象具有 volatile 修饰符,我只希望得到这样的结果。但我有这个修饰符和没有相同的结果。
【问题讨论】:
-
也许你走运了。
-
我只是检查了很多......我试图理解一个线程缓存,但是那个例子对我来说就像一个魔法。
-
它是魔法。这就是为什么你不能从这样的 sn-p 中得出结论。当您编写线程不安全代码时,添加或删除代码行可能会导致不同的行为。
标签: java multithreading threadpool volatile non-volatile