public class SegmentParser {
private CRFClassifier<CoreLabel> classifier;
public SegmentParser() {
Properties props = new Properties();
props.setProperty("sighanCorporaDict", "/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data");
props.setProperty("NormalizationTable", "/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data/norm.simp.utf8");
props.setProperty("normTableEncoding", "UTF-8");
props.setProperty("serDictionary", "/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data/dict-chris6.ser.gz");
props.setProperty("inputEncoding", "UTF-8");
props.setProperty("sighanPostProcessing", "true");
classifier = new CRFClassifier<CoreLabel>(props);
classifier.loadClassifierNoExceptions("/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data/ctb.gz", props);
}
public List<String> parse(String sentence) {
return classifier.segmentString(sentence);
}
}
对于每个Web请求,我都可以使用新的SegmentParser()。parse(句子)。实际上新的SegmentParser()需要很长时间,所以这是一个非常糟糕的设计。
所以我的问题是:
我可以为所有请求初始化1个SegmentParser实例吗?是SegmentParser.parse线程安全吗? (我认为也可以说CRFClassifier.segmentString是线程安全的)
通常,我怎么知道Java中的class.method()是否是线程安全的? 对于c ++,通常我认为如果将f()声明为以下情况,则C.f()是线程安全的。由于c.f()的执行是相互依赖的,所以即使使用相同的C实例调用f()也是如此。
C班{ public void f()const {} }