关于在JGAP中使用多线程,我应该知道任何“陷阱”吗?

时间:2012-04-25 23:56:33

标签: java multithreading synchronization genetic-programming jgap

我正致力于基因编程项目,该项目试图生成代表图像的GP。我的方法是将图像分成不同的独立部分,并使用单独的线程对它们进行演化工作。

由于事情将是异步的,因此您自然也希望对象也是独立的。问题是我注意到JGAP中的某些对象实际上是共享变量,所以它们将在线程之间共享,这会导致很多问题。例如,我注意到所有具有相同名称的Variables都是相同的,这意味着如果我想同时评估多个IGPProgram,我必须锁定变量,这可能真的妨碍表现。

我还注意到,如果您尝试创建多个GPConfiguration,程序会抱怨您必须先重置它。所以在我看来,所有GPConfiguration都是共享的(即你不能让多个线程同时创建多个配置),这是一个问题,因为创建GPProblems需要花费很多时间,而且我正在创建很多GPProblems,所以我希望减少将工作分成多个线程所花费的时间。

有没有"陷阱"在使用JGAP和线程时我需要知道什么?遗憾的是,多线程在JGAP文档中没有涉及太多,我希望我能从那些可能有JGAP经验的人那里得到一些建议。

2 个答案:

答案 0 :(得分:3)

根据FAQ,JGAP“确实支持多线程计算”。但是,这并不意味着整个API /对象图完全是线程安全的。您是否有代码示例来演示您遇到的问题?我不认为你会在没有提炼问题的情况下得到规范的答案。

examples/src/examples/simpleBooleanThreaded下的JGAP distribution zip中有一个线程示例。

答案 1 :(得分:2)

如果你想要一些变量不跨线程共享,并做一些小改动让代码支持多线程。你可以使用ThreadLocal.

When and how should I use a ThreadLocal variable?