首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

求大神解答下一个小小的有关问题,本人刚刚开始自学

2013-11-30 
求大神解答下一个小小的问题,本人刚刚开始自学为什么会出现这种结果,第一个进程进来之后运行sumsum+n;然

求大神解答下一个小小的问题,本人刚刚开始自学
求大神解答下一个小小的有关问题,本人刚刚开始自学
为什么会出现这种结果,第一个进程进来之后运行sum=sum+n;然后休眠,然后输出,但它的值不是还是100吗?怎么会有2个200的? 自学 菜鸟
[解决办法]
两个线程是并行的

也就是说两个线程都会运行到

然后等待10毫秒。
也就是说
sum=sum+m;运行了两次,然后等待10毫秒,然后依次输出

如果你对add加锁就可以了
[解决办法]


class Cus implements Runnable {

private Bank bank = new Bank();

@Override
public void run() {
for (int i = 0; i < 3; i++) {
synchronized (this) {// 这里需要加锁,因为你的Bank的实例被多个线程共享了,那么就涉及到多线程抢占资源的问题,应该加锁来达到同步的目的。
bank.add(100);
}
}
}
}

[解决办法]
第一个进程进来之后运行sum=sum+n;此时sum=100。然后休眠;但还没有输出
第二个进程进来时候运行sum=sum+n;此时sum=200.休眠,也没有输出
接着第一个醒后才接着运行输出语句,但这时的sum已经是200了
所以两个都是200
[解决办法]
应该和sleep有关系吧,我也是初学者,Thread t1=new Thread(c)的时候,通过 Runnable创建了一个线程,此线程通过for循环执行3次,第一次被休眠,让出CPU,第二次到sleep也休眠,让出cpu让第一次继续执行,所以是200,后续的原理一样吧。

热点排行