java线程之同步数据处理案例
package org.openxtiger.threads.test;
public class ShareData implements Runnable {
private int i;
public void run() {
/*synchronized(ShareData.class){
while (i<10) {
i++;
System.out.println(Thread.currentThread().getName()+":"+i);
}
}*/
while (i<10) {
System.out.println("first="+Thread.currentThread().getName()+":"+i);
synchronized(ShareData.class){
//System.out.println(i);
i++;
//System.out.println(i);
for(int j=0;j<10000;j++);
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
public static void main(String[] args) {
ShareData s1 = new ShareData();
Thread t1 = new Thread(s1);
Thread t2 = new Thread(s1);
t1.start();
t2.start();
}
}
这个线程是有问题的,猛一看没什么,多运行几次就会发现有i=11的数值输出,和while条件是i<10是想矛盾,刚开始我是百思不得其解,后来根据haohao提供的资料才搞明白,原来是synchronized保护块的问题,改成我上面被注释的那个synchronized包含块就可以了。
参考资料
lunzi
2009-06-18 14:38:31
评论:0
阅读:199
引用:0