A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周刚 中级黑马   /  2012-7-13 21:40  /  1254 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周刚 于 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();
}

}

3 个回复

倒序浏览
我这里执行的有200呀

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

QQ截图20120713215958.jpg
回复 使用道具 举报
目前我测试了10次,都是200,次代码没有安全问题,两个线程分别走的是自己for循环,互不影响,估计楼主可能是修改后忘记保存了吧
回复 使用道具 举报
这个程序存在线程并发的问题,对不起,我刚才把循环次数写得太小了。现在改得大些,就出现的并发的问题:
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, 下载次数: 5)

QQ截图20120713230117.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马