【发布时间】:2014-10-17 13:34:05
【问题描述】:
我想在海量数据上运行多线程程序。我通常创建一个可调用(或可运行)的类,并将进程所需的数据传递给该类。
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”(对吗?)如果这是真的,我为每个线程复制这些数据会浪费大量内存。有没有办法在线程之间共享数据?
【问题讨论】:
-
取决于
dataType是什么。如果它不是原始类型,则它是一个引用,因此不会被复制。您需要确保无论dataType是什么,在访问/修改其底层数据时都是线程安全的。
标签: java multithreading thread-safety threadpool