java - 启动线程内的方法?

标签 java multithreading

我无法终止 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);

当你想杀死某个DriverThreadWebDriver时,可以使用如下:

driverThread.kill();

关于java - 启动线程内的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529162/

相关文章:

java - Android重启线程

java - 代码从顺序到线程

java - Java 中的字符串或字符可以递增吗?

java - ArrayList 与 Vector - 这是否说明了同步方面的差异?

Java servlet : only allow own client

c# - 您如何跟踪线程/线程上下文?

python - 如何确定 python 中的合理线程数?

multithreading - 线程安全 Entity Framework 6

java - 使用子查询

java - 检查字符数组