整数整数を使用してカウンタを実装しようとしていますが、すべてのスレッドがタスクを完了した後に最終値を出力しようとしていますが、 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)'は何が良いのですか? – Kayaman
原子は同期を必要としません。 –
@Kayaman .. printステートメントが実行される前にこれがすべてのスレッドを完了すると思った – Amol