在多线程下,如果对一个数进行叠加,该怎么做?
public class Volatile {
private static CountDownLatch countDownLatch = new CountDownLatch(10);
public int inc = 0;
Lock lock = new ReentrantLock();
public void increase() {
lock.lock();
try {
inc++;
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
final Volatile aVolatile = new Volatile();
for (int i = 0; i < 10; i++) {
new Thread() {
public void run() {
for (int j = 0; j < 1000; j++) {
aVolatile.increase();
}
countDownLatch.countDown();
}
}.start();
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(aVolatile.inc);
}
}
Volatile {
private static CountDownLatch countDownLatch = new CountDownLatch(10);
public AtomicInteger inc = new AtomicInteger();
public void increase() {
inc.getAndIncrement();
}
public static void main(String[] args) {
final Volatile test = new Volatile();
for (int i = 0; i < 10; i++) {
new thread() {
public void run() {
for (int j = 0; j < 1000; j++) {
test.increase();
}
countDownLatch.countDown();
}
}.start();
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(test.inc);
}
}