Possible Duplicate:
Thread safety in Singleton
嗨,
我正在使用 wordnet 词典来查找单词的同义词。由于我有很多文档,我使用了多个线程来进行文档预处理,其中包括词干提取、停用词删除和同义词替换。
我使用以下代码来访问字典并获取每个文档的单词集。
IndexWordSet set = Dictionary.getInstance().lookupAllIndexWords(newWord);
这在单线程环境中工作得很好。但在多线程环境中,这并不能按预期工作。程序在一段时间后卡住了。
这是因为 Dictionary.getInstance()
是一个单例类并且它不是线程安全的?如果是这样,我如何修改对字典的访问以使其线程安全? (我无法修改字典类,因为我使用了字典库)
最佳答案
为您的 Dictationary 实例编写一个包装器。在此包装器中同步访问以确保一次只有一个线程可以访问lookupAllIndexWords()。
public class DictionaryIndexer {
public static IndexWordSet lookupAllIndexWords(newWord) {
final Dictionary instance = Dictionary.getInstance();
synchronized (instance) {
return instance.lookupAllIndexWords(newWord);
}
}
}
如果您使用相同的同步锁通过包装器封装对 Dictionary 的所有调用,您可能能够获得线程安全的解决方案。
关于java - 线程安全单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785897/