我正在用 Java 编写一个程序来模拟分子算法。由于分子算法固有地使用并发性(您可以根据需要进行尽可能多的化学反应,只要您有化学物质和浓度来提供它们),它需要我使用并发性。
但是,我最近发现我用于图形结构的包不是线程安全的。我为每个线程设置了一个 ArrayList 图表。在计算过程中,一个线程修改了它自己的 ArrayList 和其中的一些图,但我没有代码允许一个线程修改 ArrayList 或任何其他线程的图,直到它从其子线程接收到两个 ArrayList。
为了做到这一点,我正在使用 ForkJoinPool (我对此的理解是,如果我错了,请纠正我,是将任务划分为两个线程,将任务划分为两个线程......当计算在叶子线程中完成,它们返回到它们的父线程,依此类推,直到根子线程返回到它,并且根,如果 ForkJoinTask,则返回结果)。
不用说,我想要发生的一个明显的例外是工作钢化。因此,我的问题是,除了worksteel 和返回父线程的子线程之外,如果没有线程与任何其他线程交互,是否可以在并发应用程序中使用非线程安全对象?