黑马程序员技术交流社区

标题: 关于多线程的问题 [打印本页]

作者: 杜成龙    时间: 2013-6-11 18:03
标题: 关于多线程的问题
本帖最后由 杜成龙 于 2013-6-12 18:57 编辑
  1. class Bank
  2. {
  3.        private int sum;
  4.        public void add(int n)
  5.        {
  6.              sum=sum+n;
  7.              System.out.println("sum="+sum);
  8.        }
  9. }
  10. class Cus implements Runnable
  11. {
  12.       private Bank b=new Bank();
  13.       public void run()
  14.      {
  15.           for(int x=0;x<3;x++)
  16.           {
  17.                b.add(100);
  18.           }
  19.      }
  20. }
  21. class BankDemo
  22. {
  23.       public static void main(String[] args)
  24.      {
  25.           Cus c=new Cus();
  26.           Thread t1=new Thread(c);
  27.           Thread t2=new Thread(c);
  28.           t1.start();
  29.           t2.start();
  30.     }
  31. }
复制代码
这个程序的运行结果是:
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