在多线程下,如果对一个数进行叠加,该怎么做
/*这里有两种方法一种是加锁(锁可以使用Sychorized和ReentrantLock),一种是使用Atomic下的线程安全的类。*/
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();//对inc 进行原子性++的一个方法 i++
}
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);
}
}
本人才疏学浅,如有错误,烦请指出,谢谢!