假设在我跑步期间,我想优先关闭单个线程!
由于不安全的行为,我不想使用Thread.stop()
或Thread.destroy()
。
注意:我熟悉使用ExecutorService.shutdown()
选项。
但我想知道另一种实施方式。
答案 0 :(得分:4)
停止线程的标准方法是调用thread.interrupt();
。要使其工作,您需要确保线程响应中断,例如:
Thread t = new Thread(new Runnable() { public void run {
while(!Thread.currentThread().isInterrupted()) {
//your code here
}
}});
t.start();
t.interrupt();
仅在定期检查条件时才有效。请注意,您可以将中断机制委派给可中断的方法(通常是I / O,阻塞队列,睡眠/等待提供可以阻塞的方法,直到它们被中断)。
注意:在此示例中,您还可以使用:
while(!interrupted()) {
//your code here
}
interrupted()
与Thread.currentThread().isInterrupted()
的作用相同,只是中断的标志被重置。因为它是你的主题,所以没关系。
答案 1 :(得分:1)
由于某种原因,您必须使线程的run()
方法终止。如何实现这一点取决于线程的作用。
Socket
或任何其他流,请关闭该流。InterruptedException
的调用中被阻止,则可以interrupt()
线程并忽略该异常。答案 2 :(得分:1)
您的代码中可能有isStopped()
个标记。并且正在运行的线程应该定期检查此标志以查看它是否应该停止。请注意,正常停止线程需要以允许停止的方式编写正在运行的代码。
You can take a look at this question for some more detailed answers
答案 3 :(得分:0)
如果你的run()
Thread
方法中有一个循环,那么一个选项就是你的循环会在每次迭代时检查一个标志的值。
您可以在代码外部设置标志,例如您的线程会在开始下一次迭代之前停止执行。