public class AtomicNumberAppMain {
private AtomicLong atomicLong = new AtomicLong(0);
AtomicLong是否具有volatile的功能啊,要不然主线程拿到的不一定是最终值啊?
private volatile long longVar = 0;
public static void main(String[] args) throws InterruptedException {
AtomicNumberAppMain atomicNumberAppMain = new AtomicNumberAppMain();
int loop = Integer.MAX_VALUE / 10;
// TODO 并发使用线程给AtomicLong对象加一
int parallel = 10;
List<Thread> atomicThreads = new ArrayList<>();
for (int p = 0; p < parallel; p++) {
int loopCount = loop / parallel;
if (p == parallel - 1) {
loopCount = loop - (loop / parallel) * (parallel - 1);
}
int finalLoopCount = loopCount;
Thread atomic = new Thread(() -> {
long start = System.currentTimeMillis();
for (int i = 0; i < finalLoopCount; i++) {
atomicNumberAppMain.atomicLong.incrementAndGet();
}
System.out.println("Atomic takes " + (System.currentTimeMillis() - start));
});
atomic.start();
atomicThreads.add(atomic);
}
展开
作者回复:
AtomicLong 里用的就是volatile的long