黑马程序员技术交流社区
标题:
一个进程进行加法,另一个进程进行输出的问题
[打印本页]
作者:
屈_zi
时间:
2014-5-8 09:45
标题:
一个进程进行加法,另一个进程进行输出的问题
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语句会引起性能的下降,有没有更好的方法使得一个进程加完后另一个进程立即输出且只输出一次便输出下一个修改后的值?
作者:
thinkervsruler
时间:
2014-5-8 12:36
两个线程共同操作同一个资源,可以自定义一把锁,然后使用等待唤醒机制
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2