- class Volatile extends Thread{
- volatile int count = 0;
- public void run(){
- while(true){
- if(count == 1000)break;
- System.out.println("Thread:" + count);
- }
- }
- }
- public class Test4 {
- public static void main(String[] args) throws InterruptedException {
- Volatile v = new Volatile();
- v.start();
- for(int i = 0; i < 1001; i++){
- v.count++;
- }
- }
- }
复制代码 这段代码运行之后会一直输出1001,count在这里被设置成volatile型,这种类型的数据不是会绕过缓存进行读写,为什么volatile读取到却是另一个进程计算完成的结果,而不是读取到被更新后的count值?在main中v.count++后加一条sleep语句,则可以正常输出。sleep语句会引起性能的下降,有没有更好的方法使得一个进程加完后另一个进程立即输出且只输出一次便输出下一个修改后的值?
|
|