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