用Runnable实现多线程间的资源共享时遇到的问题~~

String_net 2009-07-02 06:32:06

按理说输出应该是10次(1~10) 但结果却输出了12次
class A implements Runnable
{
private int number = 10;
public void run()
{
while(this.number>0)
{
System.out.println(this.number);
this.number = this.number - 1;
}
/*
后来把while()循环改成如下后,正确输出10次~~~搞不懂!!
while(this.number>0)
{
System.out.println(this.number--);
}
*/
}
}
public class Object3
{
public static void main(String args[])
{
A a = new A();

Thread p1 = new Thread(a);
Thread p2 = new Thread(a);
Thread p3 = new Thread(a);

p1.start();
p2.start();
p3.start();
}
}

我的输出结果是:
10
9
8
7
6
5
4
3
3
2
1
3

输出结果中为什么有3个3阿 。。
...全文
88 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
一头头 2009-07-02
  • 打赏
  • 举报
回复
其实不是很难理解哇

java就这样的哇 System.out.println(this.number--); 这个是原子操作 也就是不可再分的 虽然说


System.out.println(this.number--);
和 System.out.println("The Number is "+this.number);
this.number = this.number - 1;
的效果是一样的 但是 后者不是原子操作

而且你这个类A也不是thread safty的 所以在真正打印的时候
当一个实例执行到 System.out.println("The Number is "+this.number); 的时候
另一个实例在执行 this.number = this.number - 1;

这种东西你可以做一个实验 就是 这样打印

while(this.number>0)
{
System.out.println("The Number is "+this.number + "---------------" + this.toString());
this.number = this.number - 1;
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧