黑马程序员技术交流社区

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

作者: 周刚    时间: 2012-7-13 21:40
标题: 多关于线程的一个问题
本帖最后由 周刚 于 2012-7-13 22:59 编辑

请看如下代码:
开启两个线程对count执行加运算,按道理两个线程运行完以后,count不是应该加了20000次吗?怎么结果打印没有200呢?

public class ThreadDemo {

class RunnableImpl implements Runnable{
int count=0;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<10000;i++){

count++;

System.out.println(Thread.currentThread().getName()+":"+count);
}
}

}
public static void main(String[] args) {
ThreadDemo demo=new ThreadDemo();
RunnableImpl impl=demo.new RunnableImpl();
Thread t1=new Thread(impl,"线程1");
Thread t2=new Thread(impl,"线程2");
t1.start();
t2.start();
}

}


作者: 柯玲    时间: 2012-7-13 22:00
我这里执行的有200呀

QQ截图20120713215958.jpg (13.09 KB, 下载次数: 22)

QQ截图20120713215958.jpg

作者: 金龙    时间: 2012-7-13 22:31
目前我测试了10次,都是200,次代码没有安全问题,两个线程分别走的是自己for循环,互不影响,估计楼主可能是修改后忘记保存了吧
作者: 周刚    时间: 2012-7-13 23:01
这个程序存在线程并发的问题,对不起,我刚才把循环次数写得太小了。现在改得大些,就出现的并发的问题:
public class ThreadDemo {
class RunnableImpl implements Runnable {
  int count = 0;
  @Override
  public void run() {
   for (int i = 0; i < 10000; i++) {
    count++;
    System.out.println(Thread.currentThread().getName() + ":"
      + count);
   }
  }
}
public static void main(String[] args) {
  ThreadDemo demo = new ThreadDemo();
  RunnableImpl impl = demo.new RunnableImpl();
  Thread t1 = new Thread(impl, "线程1");
  Thread t2 = new Thread(impl, "线程2");
  t1.start();
  t2.start();
}
}

QQ截图20120713230117.jpg (20.13 KB, 下载次数: 21)

QQ截图20120713230117.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2