大型对象数组在多个线程之间共享.线程安全技术

Ell*_*ott 2 java multithreading synchronization

我有一个类似于以下的大型ArrayList对象

class Entry {
    private String variable1 = null;

    private int variable2 = 0;

    public Entry (String variable1) {
    this.variable1 = variable1;
    }

   /* getters and setters for variable1 and 2 are below */
}
Run Code Online (Sandbox Code Playgroud)

我在ArrayList中启动对象,然后创建多个线程.每个线程搜索大量文档以确定variable1的内容是否嵌入在文档中.如果是,我想制作一个特定于该线程的Entry副本,类似于下面的内容:

public Entry(Entry entry) {
    this(entry.getVariable1())
  }
Run Code Online (Sandbox Code Playgroud)

然后我想改变Copy的variable2的内容而不是原始的.总结一下:

  1. 在线程之前初始化对象值.
  2. 对象由多个线程共享(只读).
  3. 当需要修改对象时,将创建该对象的副本并对该副本进行更改.

这是我的问题.

  1. 需要同步变量1和变量2的getter和setter.由于我只是在线程之间共享时读取对象,这似乎是不必要的,但如果我错了请纠正我.
  2. 有没有更好的方式来分享大量的信息.(我不想复制每个线程的arraylist,因为它超过200K对象是巨大的)?

gio*_*shc 5

  1. 如果您复制存储在只读共享数组中的对象,则不需要同步getter/setter.

  2. 只要列表是只读的,您的方法似乎就可以了