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

时间:2016-07-05 04:47:28

标签: java memory

我在Java中运行多个线程。

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

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

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

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

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

有办法吗?

提前感谢。

1 个答案:

答案 0 :(得分:0)

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

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

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

在线程中,您可以像这样调用数据:

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

}