java 多线程访问变量_关于多线程:java:在多线程程序中访问父变量

我有一个大的json文件,其中包含很长的信息列表,我需要在许多子线程中只读列表。

在java中,我们只能通过值传递变量,而不是通过引用传递变量,我希望我的程序尽可能在内存/磁盘使用情况下保持亮度。

现在我将完整列表或只有它的子列表传递给我创建的每个线程。

有没有办法从所有线程访问相同的List变量而不将完整的List复制到每个线程?

我需要'只读'列表

这是我的程序的工作方式

1 - 服务(等待文件创建)

2 - 将创建的Json文件内容读入MyList

3 - 使用不同的限制/偏移量启动MyList部分的线程

我想要做的就是这样的事情

List> MyList = JsonToObject(filePath);

executor = Executors.newFixedThreadPool( 10 );

在Luncher课程中

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

}

在Child课程中

public void run(){

for ( int i = this.offset ; i < this.limit ; i++ ) {

this.doSomthingWith ( Luncher.Mylist.get( i ) );

}

}

有没有办法从所有线程访问相同的List变量而不将完整的List复制到每个线程?

就在这里。 此外,没有办法将列表或任何其他复杂的数据结构复制到线程中 - 因为线程的内存只包含一堆过程调用帧,其中基本类型和引用的局部变量驻留在其中。 任何复杂的数据结构都驻留在堆内存中,同一进程中的所有线程都可以访问它们。

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

不会这样做会让我的程序使用太多记忆吗? 因为我将在主程序和evry子线程中拥有MyList的副本

你说_对列表的引用是通过值_传递的,我认为_在java中传递值_意味着它在被调用函数中复制新变量中的所有值内容,而不仅仅是对值的引用。 你能告诉我这个吗?

请看这里:stackoverflow.com/questions/11397008/

这很有帮助,谢谢

顺便说一下,如果你想异步处理列表的各个部分,看一下使用并行流而不是用线程手动编码:baeldung.com/java-8-streams-introduction

我试一试,再次感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值