繁体   English   中英

Java:海量数据上的多线程:线程之间共享数据?

[英]Java: multithreading on massive data: sharing data between threads?

我想对海量数据运行多线程程序。 我通常创建一个可调用(或可运行)的类,并将过程所需的数据传递给该类。

public class CallableTrainer implements Callable<PredictorResult> {

   dataType data;

   CallableTrainer( dataType massiveData ) { 
       this.data = massiveData;
   }

   @Override
   public PredictorResult call() throws Exception {
        // do something and return ... 
   }
}

基于上述实现,我假设始终为每个线程复制“ massiveData”(对吗?),如果是这样,我通过为每个线程复制该数据来浪费大量内存。 有什么方法可以在线程之间共享数据吗?

我假设总是为每个线程复制“ massiveData”(对吗?),如果这是真的...

不,是的。 仅复制对massiveData的引用。

Java不会对非原始类型进行魔术复制。 如果要复制某些内容,则必须显式地进行。

如果您还不知道这一点,那么我猜您在编写此多线程代码时会遇到各种各样的其他问题。 例如,除非这些线程仅读取 massiveData ,否则您确实需要对所做的任何更新进行某种同步或原子性保证,否则最终将导致垃圾回收。

这是一本有关该主题的好书(带有Java示例): 多处理器编程的艺术

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM