原子整数增量程序未按预期工作

时间:2016-10-03 10:06:58

标签: java multithreading atomic

我正在尝试使用原子整数实现一个计数器,然后在所有线程完成任务后打印最终值,但我没有得到最新值,在我的情况下,我应该得到的值应该是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);
  }
}

1 个答案:

答案 0 :(得分:0)

您不会等到线程完成,因此打印时已完成的增量数量会有所不同。