关于jcseg线程安全的问题

发布于 2021-12-02 12:54:41 字数 255 浏览 983 评论 2

@狮子的魂 你好,想跟你请教个问题:我正在使用jcseg,想问下JcsegTaskConfig,ADictionary,ASegment这几个对象是线程安全的吗.因为我会有大量的文本去做分词,如果放在方法内的话会内存溢出,所以我定义成了全局变量,我看了下,感觉这几个都是加载配置使用的.但是我技术不太好.怕搞错.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苍暮颜 2021-12-03 10:23:05

感谢您热心的解答.非常谢谢

冷默言语 2021-12-02 20:00:44

1,ADictionary词库对象,一般一个项目只使用一个词库实例即可,这个可以提前创建并且加载词库,然后全局使用。

2,JcsegTaskConfig也可以提前创建然后设置好然后全局使用。

3,但是,ASegment对象不能并发调用,建议是一个线程得创建一个,也可以需要的时候随时创建,如下:

ASegment seg = SegmentFactory.createJcseg(
    JcsegTaskConfig.COMPLEX_MODE, 
    new Object[]{config, dic}
);

//设置要分词的内容
String str = "研究生命起源。";
seg.reset(new StringReader(str));

//获取分词结果
IWord word = null;
while ( (word = seg.next()) != null ) {
    System.out.println(word.getValue());
}

上面的dic可以是你的全局词库对象引用,config是你的全局JcsegTaskConfig配置对象引用,然后线程内调用seg.next()直到切分完,不能并发调用seg.next()方法。

如果需要运行时修改配置,可以如下克隆:

JcsegTaskConfig newConfig = config.clone();
config.setXXX();

//config为提前创建好的全局JcsegTaskConfig对象!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文