java : 在多线程程序中访问 parent 变量

java : accessing parent variable in multi threaded programe

我有一个很大的 json 文件,其中包含一长串信息,我需要 read-only 这个列表 sub-threads.
在 java 中,我们只能按值而不是按引用传递变量,我想让我的程序 在 memory/disk 用法 上尽可能轻便。
现在我将完整列表或仅 sub-lists 传递给我创建的每个线程。
有没有一种方法可以从所有线程访问同一个 List 变量,而无需将完整的 List 复制到每个线程?
我需要'ONLY TO READ'列表

我的程序是这样工作的

1 - 服务(等待文件创建)
2 - 将创建的 Json 文件内容读入 MyList
3 - 在 MyList 的部分启动具有不同 limits/offsets

的线程

我想做的是这样的事情

List<Map<String,String>> MyList = JsonToObject(filePath);
executor = Executors.newFixedThreadPool( 10 );

午餐会class

List<Map<String,String>> MyList = JsonToObject(filePath);
executor = Executors.newFixedThreadPool( 10 );
int limit = 10;
int offset= 0;
for ( int i = 0 ; i < MyList.size() && offset <  MyList.size() ; i++ ) {
    offset = i * 10 ;
    Child thread = new Child( limit , offset );
    executor.submit( thread );
}

Childclass

public void run(){
    for ( int i = this.offset ; i < this.limit ; i++ ) {
        this.doSomthingWith ( Luncher.Mylist.get( i ) );
    }
}

列表的引用是按值传递的,因此只需将列表传递到您在线程中使用的任何方法即可。

有没有一种方法可以从所有线程访问同一个 List 变量,而无需将完整的 List 复制到每个线程?

是的,有。此外,无法将列表或任何其他复杂数据结构复制到线程中——因为线程的内存仅包含过程调用帧堆栈,原始类型和引用的局部变量驻留在其中。任何复杂的数据结构都驻留在堆内存中,同一进程中的所有线程都可以平等地访问它。