我无法终止 PhantomJS。
我插入这个
Thread initThread;
initThread = new Thread()
{
public void run()
{
WebDriver driver = new PhantomJSDriver();
driverList.add(driver);
}
};
initThreadList.add(initThread);
进入一个 for 循环(这个循环运行 10 次),然后我将新创建的线程插入到线程列表中,之后我使用 ExecutorService 同时实例化每个线程。
执行此操作后,我运行另一个 ExecutorService(与第一个一样,因此有一个线程和一个运行方法),它使用新的 PhantomJS 驱动程序,在运行方法结束时我想杀死使用过的 PJS 驱动程序.
现在,使用 initThreadList.interrupt()
(在 run 方法的末尾)不起作用,并使进程继续运行(我可以从任务管理器中看到),并且,因为我正在做的这个项目应该支持 100 多个线程(每个线程都有 PhantomJS),这不是一个好情况(程序每 10 个线程浪费 ~1gb 的 ram,并且 ram 根本不会被清空)。
我想像这样使用一个名为“kill”的自定义“运行”方法:
Thread initThread;
initThread = new Thread()
{
public void run()
{
WebDriver driver = new PhantomJSDriver();
driverList.add(driver);
}
public void kill()
{
//handle the killing of the driver here
}
};
但显然,当尝试执行 initThreadList.get(x).kill()
时,eclipse 告诉我 kill()
不存在。
我能做什么?
最佳答案
因为您不能在Thread
对象内部创建方法,您可以创建一个实现Runnable
的新类,其中包含您的kill
方法:
public class DriverThread implements Runnable {
private List<WebDriver> driverList;
public DriverThread(List<WebDriver> driverList) {
this.driverList = driverList;
}
@Override
public void run() {
WebDriver driver = new PhantomJSDriver();
driverList.add(driver);
}
public void kill() {
// Kill your driver here!
}
}
现在,您可以像以前一样创建线程:
DriverThread driverThread = new DriverThread(driverList);
Thread initThread = new Thread(driverThread);
initThreadList.add(initThread);
当你想杀死某个DriverThread
的WebDriver
时,可以使用如下:
driverThread.kill();
关于java - 启动线程内的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529162/