有许多代理服务器。我应该识别出可以使用或不能使用的服务器。方法是通过使用多个线程发送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();然而所有的线程都活着。我该怎么办?
答案 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);