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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© suiabing 中级黑马   /  2012-4-23 23:06  /  5506 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题?
例如:
t1.start();

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

t1.start();

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



6 个回复

倒序浏览
一个线程对象只能调用一次start方法.从new到等待运行是单行道,所以如果你对一个已经启动的线程对象再调用一次start方法的话,会产生:IllegalThreadStateException异常
回复 使用道具 举报
一个线程对象只能调用一次start方法!
所以是线程对象不变,再次调用就会出错
回复 使用道具 举报
赵嘉男 发表于 2012-4-23 23:15
一个线程对象只能调用一次start方法.从new到等待运行是单行道,所以如果你对一个已经启动的线程对象再调用一 ...

t1.start();

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

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

哦了
QQQ
回复 使用道具 举报
应该是线程内部的资源已经释放了,再start的话要重新分配资源,而分配资源这事是new来做的,start没做这个事情,所以就要重新new了;
个人推测
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马