2016-07-05 6 views
-1

Ich führe mehrere Threads in Java.Wie teile ich Cache-Speicher in Java Multithreading?

Ich lese eine große Datei, die etwa 5 GB ist und diese Datei unter mehreren Threads teilen.

Also lese ich die Datei und dann mehrere Threads aufrufen.

Soweit ich weiß, liest Java-Threads eine gemeinsame Variable und speichert sie in einem eigenen Cache.

Also für meinen Fall, wenn ich 5 Threads habe, nimmt das Programm bis zu 25 GB Speicher.

Ich möchte jedoch, dass meine Threads keine gemeinsame Variable in einem eigenen Cache speichern, sondern teilen, ohne sie zu speichern.

Gibt es eine Möglichkeit, dies zu tun?

danke im voraus.

+0

Die Variable, die bekommt Cached ist nicht das ganze Objekt, nur der Bezug darauf. Die CPU kann auch Teile der 5G cachen, aber nicht die ganze Sache. Im Allgemeinen müssen Sie sich nicht um den Betrieb der CPU kümmern. – yshavit

Antwort

0

Die Threads sollten nur den Verweis auf die Daten haben. Alle Java-Objekte werden als Referenz übergeben. Die Referenz wird als Wert übergeben.

Wenn Sie möchten, können Sie Singleton verwenden, um die Daten zu halten, und einen Cache zu sein:

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; 
    } 

} 

In den Threads Sie Ihre Daten wie folgt aufrufen können:

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

Das 'Instanz'-Feld _muss_ muss flüchtig sein, damit dies korrekt ist. Siehe https://en.m.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java – yshavit