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   阅读:637   引用:0

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

认证码: (如不清楚,请刷新)


Copyright@2004-2010 powered by YuLog