线程安全计数器 - 原子整数不起作用

Thread safe counter- Atomic Integer not working

我有(比如说)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();
  }
}

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

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