私はすべてのスレッドによって「グローバルカウンタ」に1を追加しようとしました。したがって、 "グローバルカウンタ"の結果は10でなければなりません。 すべてのスレッド結果を出力します。ほとんどの場合、最後の結果は10.ですが、10が最後の数字ではありません。私は同期またはロックを使用していますが、動作しません。初心者| threadPool |すべての結果を印刷する|間違った結果
ありがとうございます。私は英語があまりにも悪くないことを願っています。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Hauptprogramm {
public static final int MAX_THREADS = 10;
public static int globalCounter;
public static void main(String[] args) {
// create a pool of threads, 10 max jobs will execute in parallel
ExecutorService threadPool = Executors.newFixedThreadPool(MAX_THREADS);
// submit jobs to be executing by the pool
for (int i = 0; i < MAX_THREADS; i++) {
threadPool.submit(new Runnable() {
public void run() {
// some code to run in parallel
globalCounter++;
String originalName = Thread.currentThread().getName();
System.out.println("Result: "+globalCounter+" "+originalName);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
});
}
threadPool.shutdown();
}
}
は、結果がランダムで –
質問で出力を印刷します。結果:5 pool-1-thread-1 結果:6 pool-1-thread-6 結果:5 pool-1-thread-4 結果:5 pool-1-thread-2 結果:5 pool-1-thread-3 結果:5 pool-1-thread-5 結果:7 pool-1-thread-7 結果:8 pool-1-thread-8 結果:9 pool-1-thread- 9 結果:10 pool-1-thread-10 – Cashew
これは、同期なしでは期待される結果です。 – Fildor