有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Lucene Porter Stemmer线程安全?

快速提问,porter源于Lucene packages(Java)线程安全吗

我猜答案是否定的,因为您需要设置当前字符串,调用stem方法,然后获取当前块以获取词干单词。但也许我遗漏了一些东西——是否有线程安全的方法可以从Lucene中提取单个单词或字符串

有经验的人知道,实例化一个Porter词干分析器实例,然后在该词干分析器实例上使用同步块并执行setCurrent("..."); stem(); get();例程是更快,还是为要处理的每个字符串/文档创建一个新的Porter词干分析器实例更快

在本例中,我有1000多个文档,每个文档都被一个线程池占用(即,一个线程有一个文档)

编辑供参考-示例使用模式:

import org.tartarus.snowball.ext.PorterStemmer;
...
private String stem(String word){
       PorterStemmer stem = new PorterStemmer();
       stem.setCurrent(word);
       stem.stem();
       return stem.getCurrent();
    }

干杯


共 (1) 个答案

  1. # 1 楼答案

    看看文档,似乎^{}类不是可重入的,所以如果我是你,我会为每个线程构建一个实例。如果词干分析是程序的主要功能之一,并且没有其他方法让CPU内核保持忙碌,那么同步块似乎是个坏主意:程序会一直在阻塞,等待词干分析完成一个文档。我也不会为每个文档创建一个线程;每个核心有一个线程的线程池可能是更明智的选择

    (没有示例代码,因为我甚至无法从API docs.RTFS中找出它的用法,以了解它是如何工作的……)