[英]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.