我在Java中運行多個線程。如何在Java多線程中共享緩存內存?
我讀了大約5 GB的大文件,並在多個線程之間共享此文件。
因此,我讀取文件,然後調用多個線程。
據我所知,Java線程讀取共享變量並將其存儲在自己的緩存中。
因此,對於我的情況,如果我有5個線程,程序將佔用高達25 GB的內存。
但是,我希望我的線程不要將共享變量存儲在其自己的緩存中,而是在不存儲它的情況下共享它。
有沒有辦法做到這一點?
在此先感謝。
我在Java中運行多個線程。如何在Java多線程中共享緩存內存?
我讀了大約5 GB的大文件,並在多個線程之間共享此文件。
因此,我讀取文件,然後調用多個線程。
據我所知,Java線程讀取共享變量並將其存儲在自己的緩存中。
因此,對於我的情況,如果我有5個線程,程序將佔用高達25 GB的內存。
但是,我希望我的線程不要將共享變量存儲在其自己的緩存中,而是在不存儲它的情況下共享它。
有沒有辦法做到這一點?
在此先感謝。
線程應該只有對數據的引用。所有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();
'實例'字段_必須是易失性的,因爲這是正確的。請參閱https://en.m.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java – yshavit
的變量,得到緩存不是整個對象,只是對它的引用。 CPU也可能緩存5G的一部分,但不是全部。您通常不需要擔心CPU的操作水平。 – yshavit