关键字volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。
使用volatile关键字增加了实例变量在多个线程之间的可见性。但volatile关键字最致命的缺点是不支持原子性。
volatile解决的是变量在多个线程之间的可见性,而synchronized关键字解决的是多个线程之间访问资源的同步性。
使用原子类进行i++操作
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerThread extends Thread{
// 原子类
private AtomicInteger count = new AtomicInteger(0);
@Override
public void run(){
for(int i=0; i<10000; i++){
System.out.println(count.incrementAndGet());
}
}
}
public class Run {
public static void main(String[] args){
AtomicIntegerThread countService = new AtomicIntegerThread();
Thread t1 = new Thread(countService);
t1.start();
Thread t2 = new Thread(countService);
t2.start();
Thread t3 = new Thread(countService);
t3.start();
Thread t4 = new Thread(countService);
t4.start();
Thread t5 = new Thread(countService);
t5.start();
}
}