Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java多线程中共享缓存?_Java_Memory - Fatal编程技术网

如何在Java多线程中共享缓存?

如何在Java多线程中共享缓存?,java,memory,Java,Memory,我在Java中运行多个线程 我读取了一个大约5 GB的大文件,并在多个线程之间共享该文件 所以我读了这个文件,然后调用了多个线程 据我所知,Java线程读取共享变量并将其存储在自己的缓存中 因此,对于我的情况,如果我有5个线程,程序将占用高达25GB的内存 但是,我希望我的线程不要将共享变量存储在它自己的缓存中,而是在不存储它的情况下共享它 有没有办法做到这一点 提前感谢。线程应该只有对数据的引用。 所有Java对象都是通过引用传递的。引用是按值传递的 如果需要,可以使用Singleton保存数

我在Java中运行多个线程

我读取了一个大约5 GB的大文件,并在多个线程之间共享该文件

所以我读了这个文件,然后调用了多个线程

据我所知,Java线程读取共享变量并将其存储在自己的缓存中

因此,对于我的情况,如果我有5个线程,程序将占用高达25GB的内存

但是,我希望我的线程不要将共享变量存储在它自己的缓存中,而是在不存储它的情况下共享它

有没有办法做到这一点


提前感谢。

线程应该只有对数据的引用。 所有Java对象都是通过引用传递的。引用是按值传递的

如果需要,可以使用Singleton保存数据并作为缓存:

   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();

缓存的变量不是整个对象,只是对它的引用。CPU也可以缓存5G的一部分,但不是全部。您通常不需要担心CPU的操作级别。
instance
字段必须是易失性的,才能确保正确。看见