0

我有(比如说)10 个线程。所有线程都会增加计数器,并且会记录相同的值。计数器是一个原子整数,但有时我会在计数器中得到重复的值。我期望的是 - 计数器是线程安全的,允许计数器一次由一个唯一的线程递增,一次由一个唯一的线程读取。我应该怎么做?!谢谢

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();
  }
}
4

1 回答 1

3

使用以下代码,您将不会在日志中看到重复的值。您正在尝试在更新之前打印,这可能导致多个线程打印相同的值:

Class C {
  static AtomicInteger counter = new AtomicInteger(1);
  public void log(){
    int count = counter.getAndIncrement();
    log("counter: "+count)
  }
}
于 2020-03-12T09:41:05.227 回答