为什么我们不能在Thread对象的同一个实例上调用start方法两次?

Gur*_*lki 19 java

我正在阅读线程,发现我们无法在同一个线程实例上调用两次start方法.但我不明白同样的确切原因.那么为什么我们不能称之为两次甚至更多次呢?

Eya*_*der 10

在我看来,Thread对象是实际运行上下文的"句柄".如果允许创建与同一java.lang.Thread相关联的许多并发执行,那么您期望getStackTrace()和getState()方法返回什么?

我想Thread类可以设计为允许产生多个运行的上下文,但它的API不那么简单和干净.


lee*_*roy 5

您想要1个实例用于1个线程,因为该线程具有它将管理的内部状态.

将线程视为一种资源.让1个实例引用多个资源通常是没有意义的 - (就像你不能让java文件对象引用多个文件一样).

如果你开始一个线程两次,它也会让你遇到各种各样的麻烦,你要么继承Thread并制作一些现在超过1个线程访问的实例变量, - 如果从a创建线程也是如此Runnable.Atleast API并不能让这个搞砸了.

看一下线程所处的状态,这里http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.State.html

基本上,你可以启动一个线程的唯一时间是它处于NEW状态.而其他任何一个州都无法让它过渡到NEW