Gan*_*alf 4 java lucene concurrency multithreading
我有一个实现的类,Runnable目前正在使用Executor作为我的线程池来运行任务(将文档索引到Lucene).
executor.execute(new LuceneDocIndexer(doc, writer));
Run Code Online (Sandbox Code Playgroud)
我的问题是我的Runnable类创建了许多Lucene Field对象,我宁愿重用它们,然后在每次调用时创建新的对象.重用这些对象的最佳方法是什么(Field对象不是线程安全的,所以我不能简单地让它们变得静态) - 我应该自己创建ThreadFactory吗?我注意到一段时间后程序开始急剧下降,我唯一能想到的就是它的GC开销.我目前正在尝试对该项目进行分析,以确保这甚至是一个问题 - 但现在让我们假设它是.
Tim*_*der 14
您的问题询问如何重用Runnable,因此我将忽略其他详细信息并简单回答该问题.
如果您使用的是ThreadPoolExecutor,则可以使用[ThreadPoolExecutor #afterExecute] [1]方法将Runnable对象返回到'cached'Runnables的池/队列.
[1]:http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html#afterExecute (java.lang.Runnable,java.lang.Throwable)