java 线程start后即使运行结束也不能再start了?

netsgo 2010-09-05 05:27:56
如题,线程start后,确定已经不再isAlive了,但是再次start会报错。
据说线程start后不能再次启动同一个线程,必须要重新new一个Thread(或Runnable)对象才行吗?
线程一旦启动,不论结果如何,都不能再次启动了?
如果是,能不能简单解释一下这样做的原因?
谢谢!
...全文
1124 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengchengjiji 2010-09-06
  • 打赏
  • 举报
回复
线程结束后,就被资源回收了,要重新申请资源!
ditouye 2010-09-06
  • 打赏
  • 举报
回复

每天回帖即可获得10分可用分!
michaellufhl 2010-09-06
  • 打赏
  • 举报
回复
看java.lang.Thread.start()源代码就是:
if (started)
throw new IllegalThreadStateException();
started = true;
。。。。
myisfei 2010-09-06
  • 打赏
  • 举报
回复
没有作用线程池的结果呀,要知道线程执行是一个对象的运行过程,当运行完毕,对象会被注销,注销了的对对象当然不能用其对象方法了呀,要想再次能用start方法可使用线程池来控制。一般情况下线程都要用线程池控制,否则系统会很慢很耗损资源
  • 打赏
  • 举报
回复

运行 ------> 结束
/ \
/ \
新建-------> 就绪<-----阻塞


上面图没有画好
  • 打赏
  • 举报
回复
运行 ------> 结束
/ \
/ \
新建-------> 就绪<-----阻塞
我觉得,如果start了,那么就说明这个线程应该是从就绪到运行状态了,而这个线程不在alive了,那么就说明这个线程应该是结束状态了,从上面的图可以看出,从结束状态不能转到其他的任何一个状态,所以要再次start的话,就只能是new一个线程了。操作系统教程上有说,这只是我的看法而已,不知道对不对。
netsgo 2010-09-06
  • 打赏
  • 举报
回复
谢谢楼上,你测的我也已经验证过了,只是不明白为什么非要重新new。
希望能知所以然,呵呵。
joy_liut 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pengchengjiji 的回复:]
线程结束后,就被资源回收了,要重新申请资源!
[/Quote]

正解~
guanfuneng 2010-09-06
  • 打赏
  • 举报
回复
一个线程只能运行一次......
macrotea-cn 2010-09-05
  • 打赏
  • 举报
回复
亲测过了
要 thread=null;后然后 thread=new MyThread()来新开线程
huntor 2010-09-05
  • 打赏
  • 举报
回复
线程属于消耗品,

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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