java 线程的,isAlive() 是false的时候,可以start()吗?

wxwsh21 2014-08-27 06:45:06
请问线程的终止一般用什么办法?
我在主线程中用start()启动一个子线程,子线程的run方法大概是下面这样的。
public void run() {
while (flg) {
****处理****
}
}

在主程序中把flg设成false以后,子线程就跳出循环了,用子线程的isAlive()方法看,结果也是false。
这个时候想用start()方法重新启动子线程的时候抛出异常。
java.lang.IllegalThreadStateException

这是为什么,是子线程没有真正停止吗?
如果想重新开启子线程应该怎么办?
...全文
414 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小湘eeeee 2014-08-28
  • 打赏
  • 举报
回复
貌似没有,一般控制线程 都在循环里判断个标志.通过标志值进行你自己的想法. 你想要的重启时没得了. 你的想法可能是想暂停行动与恢复行动吧. 可以暂停的.然后你唤醒他
wxwsh21 2014-08-28
  • 打赏
  • 举报
回复
明白了,谢谢各位啊。
lxraiyl 2014-08-28
  • 打赏
  • 举报
回复
线程执行完run()方法后就结束了。。。这个线程都不存在了,你怎么能重启呢。 楼主你说的应该是将线程暂停,然后必要时候再唤醒它吧
a12939026 2014-08-28
  • 打赏
  • 举报
回复
run完就不能再start了 你的功能可以考虑在代码里wait一下, 需要重启就notify它
wxwsh21 2014-08-28
  • 打赏
  • 举报
回复
刚才引用错了,应该引用 mysd76 老兄的回复
wxwsh21 2014-08-28
  • 打赏
  • 举报
回复
引用 4 楼 fengcaho0616 的回复:
好吧 瞬间明白了~~!
谢谢回复,跟你说的差不多,我在下面这个循环里有暂停线程和恢复线程的操作。 while (flg) { ****处理**** } 不过整个循环退出以后,我仍然需要再次开启这个线程。是不是这时候就只能重新new一个,而不能把原来这个再start起来了?
fengcaho0616 2014-08-27
  • 打赏
  • 举报
回复
好吧 瞬间明白了~~!
fengcaho0616 2014-08-27
  • 打赏
  • 举报
回复
弱弱问下 没有重启线程的方法吗~~! .isAlive()=true 然后再.start可以吗 ~~! 和楼主同求大神解答
scott_129 2014-08-27
  • 打赏
  • 举报
回复
你这个线程已经执行完毕了,都已经不存在了,你肯定不能再start了。不存在的东西,你怎么启动了。 只能重新创建线程再进行start咯。
whos2002110 2014-08-27
  • 打赏
  • 举报
回复
run方法执行完以后线程就结束了, 不能再start。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧