可能重复:
如何在 Java 中启动/停止/重新启动线程?
1.如果您在正在运行的线程上调用 start(),则会出现错误 2.如果您在已停止的线程上调用 start(),则不会发生任何事情。
不支持对同一对象重新启动的原因是什么?
可能重复:
如何在 Java 中启动/停止/重新启动线程?
1.如果您在正在运行的线程上调用 start(),则会出现错误 2.如果您在已停止的线程上调用 start(),则不会发生任何事情。
不支持对同一对象重新启动的原因是什么?
我认为设计者这样做是因为操作系统级别的线程通常以这种方式运行 - 它们被创建,它们可能运行,然后它们被销毁并且操作系统执行清理。因此,Java 设计者可能希望 Java 中的线程概念接近于大多数操作系统中的线程。这些方法start()
并不stop()
意味着暂停线程(我们为此进行了同步),只是为了让它运行并销毁对象。也许名字有点混乱。请注意,stop()
它已被弃用且不应使用,因此如果我们消除stop()
,该名称start()
就不会再令人困惑了。
由于 Thread.run() 方法背后的想法。这个想法是每个线程都有生命周期,如果它过期(完成 run() 方法块),线程就会死掉。如果你想在一段时间内停止线程然后再次运行它,常见的方法是实现 Runnable 接口(或扩展 Thread 类)并在里面得到一个布尔标志。这是一个简单的代码:
public class MyThread implements Runnable {
private Thread t;
private boolean isRestarted;
private boolean isInterrupted;
public MyThread() {
t = new Thread(this);
isInterrupted = false;
isRestarted = false;
t.start();
}
public void run() {
//Do somework
while(true) {
if(isInterrupted) break;
if(isRestarted) run();
}
}
public void restart() { isRestarted = true; }
public void interupt() { isInterrupted = true; }
}
现在,当线程没有被中断时,它将等待重新启动。当您中断它时,它无法再重新启动。