2013-07-25 29 views
0

我目前使用ExecutorService解析文件:如何使其ExecutorService中的线程与Runnable进行通信?

ExecutorService service = Executors.newFixedThreadPool(10); 

及更高版本:

service.submit(new FileParser(file)); 

但是用来解析文件的工具需要一个初始化这需要相当长。我想每个线程只执行一次初始化(因为初始化参数不是线程安全的,所以并不是一次),然后只执行提交的可运行子句中的解析。

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

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

但是后来我对如何提供新的文件,不知道解析到线程... 任何想法?

感谢

+0

是否需要初始化取决于要解析的文件?那么看起来,你必须在创建FileParser的时候这样做。 ThreadFactory.newThread将由ExecutorService调用。事实上,这个参数不会是你的Runnable(即FileParser),但它将是一个包装工人。 – Seelenvirtuose

回答

1

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

+0

这很完美,谢谢! 我初始化了线程的“运行”中的所有内容,并使用ThreadLocal让所有新的Runnables知道初始化参数,它运行得非常完美,现在我的整个过程更快! – jpl

相关问题