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

时间:2014-08-24 03:41:45

标签: java multithreading thread-safety threadpool

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

public class CallableTrainer implements Callable<PredictorResult> {

   dataType data;

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

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

基于上面的实现,我假设&#39;海量数据&#39;总是为每个线程复制(对吗?)如果这是真的,我通过为每个线程复制这些数据来浪费大量内存。有没有办法在线程之间共享数据?

1 个答案:

答案 0 :(得分:6)

  

我认为&#39;海量数据&#39;总是为每个线程复制(对吧?)如果这是真的......

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

Java不会做非原始类型的魔术副本。如果你想复制一些东西,你必须明确地做。

如果您还不知道,那么当您编写此多线程代码时,我猜测您会遇到各种其他问题。例如,除非这些线程只是读取 massiveData,否则 真的 需要对任何更新进行某种同步或原子性保证你做了,否则你最终会得到垃圾。

这是一本关于该主题的好书(使用Java示例): The Art of Multiprocessor Programming