我需要做的是能够阻止从一个实现runnable的线程类运行的所有线程。这就是我的意思:这是我的“线程”类的开头:
public class HTTP extends Thread
{
int threadNumber;
String host;
int port;
int timeLeft;
private BufferedReader LocalBufferedReader;
public HTTP(int threadNumber, String host, int port, int timeLeft)
{
this.threadNumber = threadNumber;
this.host= host;
this.port = port;
this.timeLeft = (timeLeft * 1000);
}
public void run()
{
这就是我创建多个线程的方法:
for (int n = 1; n <= m; n++) {
new HTTP(n + 1, str, j, k).start();
}
m是要创建的线程数。这可以是50-1000。现在我需要做的就是突然停止所有这些。我怎样才能做到这一点?
答案 0 :(得分:9)
首先存储所有线程:
ArrayList<Thread> threads = new ArrayList<Thread>();
for (int n = 1; n <= m; n++) {
Thread t = new HTTP(n + 1, str, j, k);
threads.add(t);
t.start();
}
现在对于stop
方法,只需循环所有线程并在它们上调用中断:
for(Thread thread : threads)
{
thread.interrupt();
}
确保在HTTP线程中检查isIntruppted()
。所以你会做这样的事情:
public class InterruptTest {
static class TThread extends Thread {
public void run() {
while(!isInterrupted()) {
System.out.println("Do Work!!!");
try {
sleep(1000);
} catch (InterruptedException e) {
return;
}
}
}
}
public static void main(String[] args) throws InterruptedException {
Thread t = new TThread();
t.start();
Thread.sleep(4000);
System.out.println("Sending interrupt!!");
t.interrupt();
Thread.sleep(4000);
}
}
答案 1 :(得分:3)
在Java中停止线程是一个通过中断实现的协作过程。您可以存储线程并逐个中断它们:
List<Thread> threads = new ArrayList<> ();
for (int n = 1; n <= m; n++) {
Thread t = new HTTP(n + 1, str, j, k);
threads.add(t);
t.start();
}
//later on
for (Thread t : threads) {
t.interrupt();
}
然而,值得注意的是:
run
方法通过停止正在执行的操作对中断做出反应时,此方法才有效答案 2 :(得分:3)
首先,启动1000个线程实际上毫无意义,因为很少有线程会被安排实际同时运行。
其次,你不能“停止”线程。你所能做的就是通过合作代码很好地问他们。
执行所需操作的最简单方法是关闭JVM。