Java - java线程调用可以多次启动吗?

sgo*_*les 3 java multithreading

伙计们,

我知道这个问题在此之前已被提出,但是间接地.但它没有回答我的怀疑.
问题:在同一个线程上调用start方法两次是否合法?

规格来看,

不止一次启动一个线程永远不合法.特别是,一旦完成执行,线程可能无法重新启动.

我同意.但是我的代码没有抛出一个IllegalThreadStateException预期会执行以下程序的东西.

   public class Tester extends Thread {
        public void run() {
            System.out.print("run");
        }
        public static void main(String[] args) {
            Tester thread = new Tester();
            new Thread(thread).start();
            new Thread(thread).start();
        }
    }    
Run Code Online (Sandbox Code Playgroud)

Q.1)我在Eclipse中运行了上面的代码.在这里,因为我试图在同一个实例上启动一个新线程,所以IllegalThreadStateException预计会抛出一个.但事实并非如此.

为什么?

Q.2) 如果我们确实在同一个实例上开始了一个新线程,那会有什么害处?

任何帮助将不胜感激 !

Vin*_*nie 9

你不是在同一个实例上调用start().每次使用new时,您都会创建一个独特的实例.因此调用start()没问题.

如果你这样做:

 Thread t = new Thread(thread);
 t.start();
 t.start();
Run Code Online (Sandbox Code Playgroud)

那你可能有问题.


Gur*_*lki 6

首先,您要调用两个不同的线程对象,即:

 new Thread(thread).start();
 new Thread(thread).start();
Run Code Online (Sandbox Code Playgroud)

你在两个不同的实例上调用start方法.出于这个原因你没有得到例外.

尝试使用以下来获取异常

thread.start();
thread.start();
Run Code Online (Sandbox Code Playgroud)

对于你的第二个问题.你可以在这里得到答案:为什么我们不能在Thread对象的同一个实例上两次调用start方法?

这是幸运的问我:)