从线程中彻底退出。

时间:2013-12-19 20:38:10

标签: java multithreading

有许多代理服务器。我应该识别出可以使用或不能使用的服务器。方法是通过使用多个线程发送POST请求每个代理。然后我拿起回复200 http响应代码的服务器。无论如何,这不是我的问题的重点,我必须清除这些线程,因为我应该每30分钟刷新一次代理服务器。因为公共代理服务器的环境非常不稳定。我必须整天运行这个程序。 (抱歉尴尬的英语)

我用这个:

        for (int i=0; i<30; i++){
            Runnable r = new CheckProxy(ip[i], port[i]);
            new Thread(r).start();
        }
    }

有一个显示代理服务器的网站。我带来了,并推进上面的代码。 CheckProxy类会发送post请求,并保存响应代码。无论如何在结论中,我如何退出这些线程?

我试过这个。变量static boolean isExit和方法public void stopChecking() { isExit = true; }

    if (!isExit){
    for (int i=0; i<30; i++){
            Runnable r = new CheckProxy(ip[i], port[i]);
            new Thread(r).start();
        }
    }
    else { Thread.interrupted(); }
}

我要做的就是离开这个主题。我想退出检查启用的所有线程。为此,我打电话给stopChecking();然而所有的线程都活着。我该怎么办?

2 个答案:

答案 0 :(得分:1)

你应该保留一个Thread对象列表,然后调用它们的连接...就像这样,

java.util.List<Thread> al = new java.util.ArrayList<Thread>();
for (int i=0; i<30; i++){
  Runnable r = new CheckProxy(ip[i], port[i]);
  Thread t = new Thread(r);
  al.add(t);
  t.start();
}
// Ensure all of the threads finish before continuing.
for (Thread t : al) {
  t.join(); // or t.interrupt();
}

答案 1 :(得分:1)

或使用标准ExecutorService方法:

ExecutorService service = Executors.newFixedThreadPool(30);

for (int i=0; i<30; i++){
    service.submit(new CheckProxy(ip[i], port[i]));
}

service.shutdown();
service.awaitTermination(10, TimeUnit.SECONDS);