如何在Java中启动/停止/重新启动线程?

2022-08-31 20:34:20

我真的很难找到一种方法来启动,停止和重新启动Java中的线程。

具体来说,我在文件中有一个类(当前实现)。我的主应用程序需要能够在线程上启动此任务,在需要时停止(杀死)线程,有时杀死并重新启动线程...TaskRunnableTask.java

我的第一次尝试是使用,但我似乎找不到重新启动任务的方法。当我使用任何未来的调用失败,因为是“关闭”...ExecutorService.shutdownnow().execute()ExecutorService

那么,我该如何做到这一点呢?


答案 1

线程停止后,您将无法重新启动它。但是,没有什么可以阻止您创建和启动新线程。

选项 1:创建新线程,而不是尝试重新启动。

选项 2:与其让线程停止,不如让它等待,然后在收到通知时,您可以允许它再次工作。这样,线程永远不会停止,也永远不需要重新启动。

根据评论编辑:

要“杀死”线程,您可以执行以下操作。

yourThread.setIsTerminating(true); // tell the thread to stop
yourThread.join(); // wait for the thread to stop

答案 2

查看 java.lang.Thread.

要启动或重新启动(一旦线程停止,您就无法重新启动同一线程,但这没关系;只需创建一个新实例):Thread

// Create your Runnable instance
Task task = new Task(...);

// Start a thread and run your Runnable
Thread t = new Thread(task);

要停止它,请在您的实例上有一个方法,该方法设置一个标志以告诉该方法退出;从 返回退出线程。如果您的调用代码需要知道线程在返回之前确实已停止,则可以使用:Taskrunrunjoin

// Tell Task to stop
task.setStopFlag(true);

// Wait for it to do so
t.join();

关于重启:即使无法重启,如果实例具有状态并且您希望保留,您也可以使用新线程重用实例;这是同样的事情。只需确保您的设计为允许多次调用 。ThreadRunnableRunnablerun