黑马程序员技术交流社区
标题:
关于多线程的问题
[打印本页]
作者:
杜成龙
时间:
2013-6-11 18:03
标题:
关于多线程的问题
本帖最后由 杜成龙 于 2013-6-12 18:57 编辑
class Bank
{
private int sum;
public void add(int n)
{
sum=sum+n;
System.out.println("sum="+sum);
}
}
class Cus implements Runnable
{
private Bank b=new Bank();
public void run()
{
for(int x=0;x<3;x++)
{
b.add(100);
}
}
}
class BankDemo
{
public static void main(String[] args)
{
Cus c=new Cus();
Thread t1=new Thread(c);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
复制代码
这个程序的运行结果是:
sum=100
sum=300
sum=400
sum=200
sum=500
sum=600
问题是我的程序中不是两个线程共同执行run方法中的内容吗?怎么会输出六个数呢?不应该是三个吗?求解答,谢谢啦!
作者:
小冰块
时间:
2013-6-11 18:15
你用Thread创建了两个对象,每一个对象分别使用run方法,然后每一个run方法分别执行3次循环,一共就是六次,没有错。
作者:
007诸葛亮
时间:
2013-6-11 18:31
你创建了两个线程对象,假设为线1和线2。当线1和线2启动start()方法后,两个线程开始抢夺资源,谁先抢到谁就先执行run()方法里的循环,有两个线程所以会执行6次。但是若想出现三次运行结果,在本程序中你得考虑到线程安全问题.可以利用同步代码块或JKD1.5后LOCK解决,因为你程序块中有线程共享数据。
作者:
夜默
时间:
2013-6-11 19:45
楼主你好 如果帖子的问题已经解决,请把帖子的类型改为“已解决”。
作者:
月在青天
时间:
2013-6-12 16:23
加个锁就好了
作者:
不破大地
时间:
2013-6-12 16:31
每次run方法后都有三个sum,你创建了两个线程,每个线程运行一次run方法,你算一算结果就是6个sum
OK?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2