java关于在JGAP中使用多线程,有什么我应该知道的“陷阱”吗?
我正在做一个基因编程项目,试图生成代表图像的GPs。我的方法是将图像分割成不同的独立部分,并让单独的线程对其执行演化任务
由于事情将是异步的,自然您也希望对象是独立的。问题是,我注意到JGAP中的某些对象实际上是共享变量,因此它们将在线程之间共享,这将导致很多问题。例如,我注意到所有具有相同名称的Variables都是相同的,这意味着如果我想同时计算多个IGPProgram,我必须锁定变量,这可能会影响性能
我还注意到,如果您试图创建多个GPC配置,程序会抱怨您必须先重置它。因此,在我看来,所有的GPP配置都是共享的(也就是说,你不能让多个线程同时创建多个配置),这是一个问题,因为创建GPProblems可能需要很多时间,而我正在创建很多GPProblems,所以我希望通过将工作拆分为多个线程来减少所花费的时间
在使用JGAP和线程时,我是否需要了解一些“陷阱”?不幸的是,JGAP文档中没有太多涉及多线程,我希望能从那些可能有JGAP经验的人那里得到一些建议
# 1 楼答案
根据FAQ,JGAP“确实支持多线程计算”。然而,这并不意味着整个API/对象图是完全线程安全的。您是否有一个代码示例来演示您遇到的问题?我认为如果你的问题没有一点改进,你就不会得到一个规范的答案
JGAP distributionzip中的
examples/src/examples/simpleBooleanThreaded
下有一个线程示例# 2 楼答案
如果希望某些变量不跨线程共享,请进行一些小的更改,使代码支持多线程。你可以使用ThreadLocal.
When and how should I use a ThreadLocal variable?