働いていないアトミック整数反スレッドセーフ

grootygroot:

私は(と言う)10個のスレッドを持っています。すべてのスレッドは、カウンタをインクリメントし、同様のことが記録されます。カウンターは原子の整数であるが、時々私はカウンターで重複する値を取得しています。私は、IS-カウンタは、スレッドセーフであることカウンタは一度にスレッドだけ増分することができるように、一度に唯一のスレッドで読むことを期待するもの。私は違った何をすべきか。ありがとうございました

Class A{
 public void AM(){
   ExecutorService executor = Executors.newFixedThreadPool(threadPoolCount);
   List tasks = new ArrayList(tasklist);
   for(loop tasks) {
   Future<t> futureObjects = executor.invokeAll(task);
  }
 }
}
Class B implements Callable{
    public Object call(){
      //call method log
  }
}
Class C {
  static AtomicInteger counter = new AtomicInteger(1);
  public void log(){
    log("counter: "+counter)
    counter.getAndIncrement();
  }
}
タルン:

コードの下に与えられたでは、あなたのログに重複した値を参照してください文句を言いません。あなたは同じ値を印刷し、複数のスレッドにつながる可能性があり、更新前に印刷しようとしています。

Class C {
  static AtomicInteger counter = new AtomicInteger(1);
  public void log(){
    int count = counter.getAndIncrement();
    log("counter: "+count)
  }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=275823&siteId=1