我正在为根据牛顿定律在空间中移动的一组 N 个粒子构建一个(并发)模拟器。我的想法是将每个粒子建模为一个任务,它与其他粒子(任务)相互作用以获得它们的位置和质量,从而计算它所受的净力。每个粒子任务都是
while(true){
force = thisParticle.calculateNetForce(allTheParticles);
thisParticle.waitForAllTheParticlesToCalculateNetForce(); // synchronization
thisParticle.updatePosition(force);
thisParticle.waitForAllTheParticlesToUpdateTheirState(); // synchronization
}
我可以有很多粒子(100 个或更多),所以我无法创建这么多 Java 线程(映射到物理线程)。我的想法是使用Runtime.getRuntime().availableProcessors()+1
可以执行许多任务的线程。
但是,我不能使用 FixedThreadExecutor 因为粒子任务没有结束。我想使用一个 FixedThreadExecutor ,它还必须能够在内部执行某种调度。你知道一些为此目的吗?
或者,您能否建议我从并发的角度(例如,不同的任务分解)对这样的系统进行建模的更好方法?
Ps:我仅限于“经典”并发机制,不包括actor或类似架构。