簡體   English   中英

Java:海量數據上的多線程:線程之間共享數據?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM