【发布时间】:2014-04-27 15:20:46
【问题描述】:
我正在用 Java 编写一个程序来模拟分子算法。由于分子算法固有地使用并发性(您可以根据需要进行尽可能多的化学反应,只要您有化学物质和浓度来提供它们),它需要我使用并发性。
但是,我最近发现我用于图形结构的包不是线程安全的。我为每个线程设置了一个 ArrayList 图表。在计算过程中,一个线程修改了它自己的 ArrayList 和其中的一些图,但是我没有代码允许一个线程修改 ArrayList 或任何其他线程的图,直到它从其子线程接收到两个 ArrayList。
为了实现这一点,我正在使用 ForkJoinPool (我对此的理解是,如果我错了,请纠正我,是将任务划分为两个线程,将任务划分为两个线程......当计算在叶线程中完成时,它们返回到它们的父线程,依此类推,直到根子线程返回到它,如果是 ForkJoinTask,则根返回结果)。
不用说,我想要发生的一个值得注意的例外是钢结构。因此,我的问题是,除了 worksteel 和返回父线程的子线程之外,如果没有线程与任何其他线程交互,是否可以在并发应用程序中使用非线程安全对象?
【问题讨论】:
-
帖子就像代码,需要缩进。
-
线程安全是线程安全的。如果要修改共享数据,则必须进行同步。也许你想要一个线程安全的 List 版本。
-
是的。只要一个非线程安全的对象只被一个线程使用,就没有问题。每个服务器应用程序都使用许多线程,并且每个线程始终使用 ArrayList、StringBuilder 和许多非线程安全对象。
-
优秀。但是,如果发生工作钢化,它仍然是线程安全的吗?
标签: java multithreading concurrency thread-safety forkjoinpool