我想在大量数据上运行多线程程序。我通常创建一个可调用(或可运行)的类,并将进程所需的数据传递给类。
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;总是为每个线程复制(对吗?)如果这是真的,我通过为每个线程复制这些数据来浪费大量内存。有没有办法在线程之间共享数据?
答案 0 :(得分:6)
不,不,不。仅复制我认为&#39;海量数据&#39;总是为每个线程复制(对吧?)如果这是真的......
massiveData
的引用。
Java不会做非原始类型的魔术副本。如果你想复制一些东西,你必须明确地做。
如果您还不知道,那么当您编写此多线程代码时,我猜测您会遇到各种其他问题。例如,除非这些线程只是读取 massiveData
,否则 真的 需要对任何更新进行某种同步或原子性保证你做了,否则你最终会得到垃圾。
这是一本关于该主题的好书(使用Java示例): The Art of Multiprocessor Programming