【发布时间】:2016-10-03 10:06:57
【问题描述】:
我正在尝试使用原子整数实现计数器,然后在所有线程完成任务后打印最终值,但我没有得到最新值,在我的情况下,我应该得到的值应该是 20,但它在波动比如 17,18,16,19,20 等
程序如下:
class AtomicOperations implements Runnable
{
private AtomicInteger ai;
private int a;
AtomicOperations(int aivalue, int ivalue) {
ai = new AtomicInteger(aivalue);
this.a = ivalue;
}
@Override
public void run() {
ai.getAndIncrement();
}
public static void main(String args[]) {
AtomicOperations obj = new AtomicOperations(10, 10);
Thread[] t = new Thread[10];
synchronized (obj) {
for (int i = 0; i < t.length; i++) {
t[i] = new Thread(obj, "Thread-" + (i + 1));
t[i].start();
}
}
System.out.println(obj.ai);
}
}
【问题讨论】:
-
您认为您的
synchronized(obj)有什么用处? -
Atomic 不需要同步。
-
@Kayaman .. 我认为这可能会在打印语句运行之前完成所有线程
-
@Amol 它没有。它不做那种事情。实际上,在您的代码中,它绝对没有任何作用。如果你在猜测,你就没有机会编写正确的多线程代码。
标签: java multithreading atomic