0
次の問題は、OCP Java SE 7 Programmer II試験の模擬試験にあります。解決策は答えが0だと言いますが、私の同僚と私は答えが-5と5の間でないことを確信していません(これは選択肢です)。コードは次のとおりです。AtomicIntegerを使用したスレッドの動作
import java.util.concurrent.atomic.AtomicInteger;
class AtomicVariableTest {
private static AtomicInteger counter = new AtomicInteger(0);
static class Decrementer extends Thread {
public void run() {
counter.decrementAndGet(); // #1
}
}
static class Incrementer extends Thread {
public void run() {
counter.incrementAndGet(); // #2
}
}
public static void main(String []args) {
for(int i = 0; i < 5; i++) {
new Incrementer().start();
new Decrementer().start();
}
System.out.println(counter);
}
}
ありがとうございます!
それは間だ-5あなたが始めた10のスレッドのうち、カウンターを印刷する前に何人が実際に作業を行ったのか分かりません。なぜなら、それらが完了するのを待たずにいたからです。 –
@SotiriosDelimanolis - 私はあなたが "未定義"を意味するとは思わない(ここではスレッドの安全でないアクションはない)。私はあなたが "非決定論的"を意味すると思う(@MattTimmermansのように)、どのスレッドが完了したか分からないからです。 – jtahlborn
@jtahええ、あなたが言ったこと。 –