在多线程下,如果对一个数进行叠加,该怎么做?
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) ;
}
}