AtomicInteger虽然是原子性的Integer类型,在赋值,自增上,不能被其他线程打断,从而保证了数据的安全性,但是,在线程作用范围较小的情况下,虽然是不能被打断的,但是在自增之前,线程已经抢先运行了还未自增前的值,这样又导致了数据错乱。
下面用代码来解释下
public class Test {
private static final ThreadPoolExecutor EXECUTOR;
static {
EXECUTOR = new ThreadPoolExecutor(4, 5, 2000, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
}
public static void main(String[] args) {
File file = new File("D:\\javacccc\\eee\\");
List<String> list = new CopyOnWriteArrayList<String>();
getFile(file, list);
// System.out.println(list);
AtomicInteger ai = new AtomicInteger(0);
for (int i = 0; i < list.size(