2016-07-05 102 views
-1

我在Java中運行多個線程。如何在Java多線程中共享緩存內存?

我讀了大約5 GB的大文件,並在多個線程之間共享此文件。

因此,我讀取文件,然後調用多個線程。

據我所知,Java線程讀取共享變量並將其存儲在自己的緩存中。

因此,對於我的情況,如果我有5個線程,程序將佔用高達25 GB的內存。

但是,我希望我的線程不要將共享變量存儲在其自己的緩存中,而是在不存儲它的情況下共享它。

有沒有辦法做到這一點?

在此先感謝。

+0

的變量,得到緩存不是整個對象,只是對它的引用。 CPU也可能緩存5G的一部分,但不是全部。您通常不需要擔心CPU的操作水平。 – yshavit

回答

0

線程應該只有對數據的引用。所有Java對象都通過引用傳遞。該引用是按值傳遞的。

如果你願意,你可以用辛格爾頓來保存數據,併爲高速緩存:

public class ClassicSingleton { 
    private static ClassicSingleton instance = null; 

    private byte[] yourData; 
    private ClassicSingleton() {} 
    public static ClassicSingleton getInstance() { 
     if(instance == null) { 
     synchronized(SingletonTest.class) { 
     if(instance == null) 
      instance = new ClassicSingleton();  
    } 
     return instance; 
    } 

    public byte[] getYourData(){ 
     return this.yourdata; 
    } 

} 

在線程,你可以打電話給你的數據是這樣的:

ClassicSingleton.getInstance().getYourData(); 
+0

'實例'字段_必須是易失性的,因爲這是正確的。請參閱https://en.m.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java – yshavit