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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许鑫星 中级黑马   /  2013-2-26 23:58  /  1195 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 许鑫星 于 2013-2-27 12:30 编辑

我想实现一个功能,除了主函数之外,做多只能同时进行2个线程,写了一个方法,但是有点问题
  1.         //count是一个静态全局变量,count=2,有3个线程传入,但是在count=0之后第三个线程并不会启动
  2.         public void exec(Thread thr) {
  3.                 while (count <= 0);
  4.                         count--;
  5.                 thr.start();
  6.                 while (!thr.isAlive()) {
  7.                         //这里执行不到,为什么呢
  8.                         count++;
  9.                 }
  10.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
当count=0时。程序在进行死循环。所以启动不了
回复 使用道具 举报
第一个线程进入 count=2  count-- 后运行 count=1  由于该线程刚刚.start()  所以执行while (!thr.isAlive())时 可能该线程还没有死 所以count++; 不执行

在第二个线程进入同样  count=1 count-- 后运行 count=0  由于该线程刚刚.start()  所以执行while (!thr.isAlive())时 可能该线程还没有死 所以count++; 不执行

第三个线程进 count=0 while (count <= 0) ; 成立 无限循环 所以就死循环了  第三个线程就不会启动  


个人见解 求指正

ps: 斑竹大人 求及格 {:3_65:}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 回答的挺细致,我就成人之美吧~.

查看全部评分

回复 使用道具 举报
{:soso_e112:}确实是没想清楚。。。从新写了下,这次应该没问题了
  1.         public void exec(final Thread thr) {
  2.                 while (count <= 0)
  3.                         ;
  4.                 count--;
  5.                 thr.start();
  6.                 new Thread() {
  7.                         public void run() {
  8.                                         while (thr.isAlive())
  9.                                                 ;
  10.                                                 count++;
  11.                         };
  12.                 }.start();
  13.         }
复制代码
回复 使用道具 举报
本帖最后由 陈丽莉 于 2013-2-27 09:02 编辑
许鑫星 发表于 2013-2-27 01:17
确实是没想清楚。。。从新写了下,这次应该没问题了


欢迎发帖,如果得到问题答案,请将帖子改成【已解决】,若还有疑问,请继续追问~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马