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) 如果我们确实在同一个实例上开始了一个新线程,那会有什么害处?
任何帮助将不胜感激 !
你不是在同一个实例上调用start().每次使用new时,您都会创建一个独特的实例.因此调用start()没问题.
如果你这样做:
Thread t = new Thread(thread);
t.start();
t.start();
Run Code Online (Sandbox Code Playgroud)
那你可能有问题.
首先,您要调用两个不同的线程对象,即:
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方法?
这是幸运的问我:)
归档时间: |
|
查看次数: |
8279 次 |
最近记录: |