黑马程序员技术交流社区

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

作者: 许鑫星    时间: 2013-2-26 23:58
标题: 关于多线程
本帖最后由 许鑫星 于 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.         }
复制代码

作者: 谢达    时间: 2013-2-27 00:51
当count=0时。程序在进行死循环。所以启动不了
作者: 刘凯    时间: 2013-2-27 01:08
第一个线程进入 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:}

作者: 许鑫星    时间: 2013-2-27 01:17
{: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 08:59
本帖最后由 陈丽莉 于 2013-2-27 09:02 编辑
许鑫星 发表于 2013-2-27 01:17
确实是没想清楚。。。从新写了下,这次应该没问题了


欢迎发帖,如果得到问题答案,请将帖子改成【已解决】,若还有疑问,请继续追问~




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