如何从ExecutorService创建一个Thread与Runnable进行通信?

时间:2013-07-25 13:06:43

标签: java concurrency executorservice

我目前正在使用ExecutorService来解析文件:

ExecutorService service = Executors.newFixedThreadPool(10);

以后:

service.submit(new FileParser(file));

但是,用于解析文件的工具需要初始化,这需要很长时间。我想每个线程只执行一次初始化(不是一次初始化,因为初始化参数不是线程安全的),然后只执行提交的runnable中的解析。

我看到ThreadFactory可用于向执行程序提供我自己的线程,所以我可以这样初始化我的参数:

public class MyThreadFactory implements ThreadFactory {
    public Thread newThread(Runnable r) {
        return new MyThread(); // Initialization part inside the constructor
    }
}

然而,我不知道如何提供新文件来解析线程... 有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用ThreadLocal变量进行初始化。在每次执行期间,您可以检查是否已执行当前线程的初始化,然后使用它来存储您需要的任何内容。