Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程内的线程安全?_Java_Multithreading_Concurrency_Thread Safety_Forkjoinpool - Fatal编程技术网

Java 线程内的线程安全?

Java 线程内的线程安全?,java,multithreading,concurrency,thread-safety,forkjoinpool,Java,Multithreading,Concurrency,Thread Safety,Forkjoinpool,我正在用Java编写一个程序来模拟分子算法。由于分子算法固有地使用并发性(你可以根据需要进行任意数量的化学反应,只要你有提供它们的化学物质和浓度),它要求我使用并发性 然而,我最近发现我用于图形结构的包不是线程安全的。我为每个线程设置了一个图的数组列表。在计算过程中,一个线程修改自己的ArrayList和其中的一些图,但我没有代码允许一个线程修改ArrayList或任何其他线程的图,直到它从其子线程接收到两个ArrayList 为了实现这一点,我使用了ForkJoinPool(我对这一点的理解是

我正在用Java编写一个程序来模拟分子算法。由于分子算法固有地使用并发性(你可以根据需要进行任意数量的化学反应,只要你有提供它们的化学物质和浓度),它要求我使用并发性

然而,我最近发现我用于图形结构的包不是线程安全的。我为每个线程设置了一个图的数组列表。在计算过程中,一个线程修改自己的ArrayList和其中的一些图,但我没有代码允许一个线程修改ArrayList或任何其他线程的图,直到它从其子线程接收到两个ArrayList

为了实现这一点,我使用了ForkJoinPool(我对这一点的理解是,如果我错了,请纠正我,它将任务分为两个线程,这两个线程将任务分为两个线程……当在叶线程中进行计算时,它们返回到它们的父线程,依此类推,直到根子线程返回到它,而根(如果是ForkJoinTask)返回r结果)


不用说,我希望发生的事情的一个明显的例外是Worksteering。因此,我的问题是,如果除了Worksteering和返回到父线程的子线程之外,如果没有线程与任何其他线程交互,那么非线程安全的对象可以在并发应用程序中使用吗d适合映射/减少。算法需要并发;物理和化学建议了划分问题的方法。这可能是获得安全、高效并发的简单方法。

帖子就像代码一样,需要缩进。Threadsafe是Threadsafe。如果你在修改共享数据,你必须同步。可能是Threadsafe列表的rsion就是您想要的。是的。只要一个非线程安全对象只由一个线程使用,就没有问题。每个服务器应用程序都使用多个线程,每个线程始终使用ArrayList、StringBuilder和许多非线程安全对象。非常好。但是,如果发生工作转向,它仍然是线程安全的吗?