黑马程序员技术交流社区

标题: 一个stop的线程为什么不能重新start呢 [打印本页]

作者: suiabing    时间: 2012-4-23 23:06
标题: 一个stop的线程为什么不能重新start呢
如题?
例如:
t1.start();

.........当t1结束的时候........

t1.start();

这时抛出异常,IllegalThreadState异常,是不是说线程运行完就不能再次执行了呢?是不是需要再次创建线程再次运行呢?这样不是很浪费资源吗?




作者: 赵嘉男    时间: 2012-4-23 23:15
一个线程对象只能调用一次start方法.从new到等待运行是单行道,所以如果你对一个已经启动的线程对象再调用一次start方法的话,会产生:IllegalThreadStateException异常
作者: 真真姐    时间: 2012-4-23 23:20
一个线程对象只能调用一次start方法!
所以是线程对象不变,再次调用就会出错
作者: suiabing    时间: 2012-4-23 23:22
赵嘉男 发表于 2012-4-23 23:15
一个线程对象只能调用一次start方法.从new到等待运行是单行道,所以如果你对一个已经启动的线程对象再调用一 ...

t1.start();

.........当t1结束的时候........

t1.start();
启动了线程后,运行任务结束,或者其他原因导致t1结束呢?我们可以判断t1的状态嘛!
如果他到了死亡状态了,再次开启有何不可呢?
作者: 徐鑫    时间: 2012-4-23 23:26
线程从run()退出后已经处于TERMINATED状态,属于DEAD线程了。 再调用start会有异常,也就是说你第二次想再start就应该先new一个新的线程
作者: suiabing    时间: 2012-4-23 23:31
徐鑫 发表于 2012-4-23 23:26
线程从run()退出后已经处于TERMINATED状态,属于DEAD线程了。 再调用start会有异常,也就是说你第二次想再s ...

哦了
QQQ
作者: wowthe1st    时间: 2015-7-30 19:51
应该是线程内部的资源已经释放了,再start的话要重新分配资源,而分配资源这事是new来做的,start没做这个事情,所以就要重新new了;
个人推测




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