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

我正在研究一个遗传编程项目,该项目试图生成代表图像的GP.我的方法是将图像分成不同的独立部分,并使用单独的线程对它们进行演化工作.

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

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

在使用JGAP和线程时,我是否需要了解任何“陷阱”?不幸的是,在JGAP文档中没有涉及到多线程,我希望我能从那些可能有JGAP经验的人那里得到一些建议.

解决方法:

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

When and how should I use a ThreadLocal variable?

上一篇:c# – 围绕多个语句的锁定语句是否确保所有更改对其他线程可见(假设它们进入相同的互斥锁)?


下一篇:sqlite和mysql android之间的数据同步