Java:如何停止线程?

有什么办法阻止从线程的另一个线程? 就像,如果我运行一个线程来运行该线程,并导致该线程停止? 会阻止另一个线程吗?

有没有一个方法来停止从没有循环内线程? 例如,如果你正在下载理想情况下,你会想要使用循环,如果我使用循环,我不会暂停它,直到到达循环的结尾。

您可以创build一个布尔字段并在运行中检查它:

public class Task implements Runnable { private volatile boolean isRunning = true; public void run() { while (isRunning) { //do work } } public void kill() { isRunning = false; } } 

要阻止它只是打电话

 task.kill(); 

这应该工作。

我们不停止或杀死一个线程,而是我们做Thread.currentThread().isInterrupted().

 public class Task1 implements Runnable { public void run() { while (!Thread.currentThread().isInterrupted()) { ................ ................ ................ ................ } } } 

主要我们会这样做:

 Thread t1 = new Thread(new Task1()); t1.start(); t1.interrupt(); 

一种可能的方法是做这样的事情:

 public class MyThread extends Thread { @Override public void run() { while (!this.isInterrupted()) { // } } } 

而当你想停止你的线程时,只需调用一个方法interrupt():

 myThread.interrupt(); 

当然,这不会立即停止线程,而是在上面的循环的以下迭代中。 在下载的情况下,您需要编写一个非阻塞代码。 这意味着,您将尝试从套接字中只读取有限的时间内的新数据。 如果没有可用的数据,它将继续。 它可以使用这个方法从类Socket完成:

 mySocket.setSoTimeout(50); 

在这种情况下,超时设置为50毫秒。 经过这段时间,没有数据被读取,它抛出一个SocketTimeoutException。 这样,你可以编写迭代和非阻塞的线程,这可能会使用上面的构造被杀死。

以任何其他方式杀死线程是不可能的,你必须自己实现这样的行为。 在过去,Thread有一些方法(不确定是否kill()或stop()),但是现在已经废弃了。 我的经验是,一些JVM的实现甚至不包含当前的方法。

推荐的方法是将其构build到线程中。 所以,不可以(或者说不应该)从外面杀死线程。

如果需要停止,请不要频繁检查线程。 (而不是在有数据的情况下阻塞一个套接字,使用一个超时,每隔一段时间检查一下,如果用户表示想要停止)

JavaSun推荐使用共享variables作为标志,要求后台线程停止。 这个variables可以由一个不同的对象设置,请求线程终止。

你可以这样杀死另一个进程,然后杀掉其他进程。