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