当前位置: 首页 > 知识库问答 >
问题:

java:多线程程序中父变量的访问

松铭
2023-03-14

我有一个很大的json文件,其中包含一个很长的信息列表,我需要在许多子线程中只读该列表。
在java中,我们可以只通过值而不是引用来传递变量,我希望在内存/磁盘使用方面尽可能减少我的程序。
现在我将完整的列表或它的子列表传递给我创建的每个线程。
有没有一种方法可以从所有线程访问相同的列表变量,而不将完整的列表复制到每个线程中?
我需要“只读取”列表

下面是我的程序是如何工作的

1-服务(等待文件创建)
2-将创建的Json文件内容读入MyList
3-在具有不同限制/偏移量的MyList部分上启动线程

我想做的是这样的事情

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

在午餐课上

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 );
}
public void run(){
    for ( int i = this.offset ; i < this.limit ; i++ ) {
        this.doSomthingWith ( Luncher.Mylist.get( i ) );
    }
}

共有1个答案

伯鸿达
2023-03-14

对列表的引用是通过值传递的,所以只需将列表传递到线程中使用的任何方法中即可。

 类似资料:
  • 如何从多个线程同时访问静态变量。 如果我有这样的课 我需要访问线程1的值,比如 从线程2中,我需要设置如下值 这会导致内存冲突吗?。如果是,建议使用什么方法来处理这种情况?。

  • 这是一个关于Java中多线程的初学者问题。 根据我的理解,当创建多个(用户)线程来运行程序或应用程序时,就没有父线程和子线程的概念。它们都是独立的用户线程。 因此,如果主线程完成执行,那么另一个线程(Thread2)仍将继续执行,因为在Thread2的执行线程完成之前,它不会被JVM杀死(https://docs.oracle.com/javase/6/docs/api/java/lang/Thr

  • 问题内容: 类的静态成员是否在每个进程或线程中仅作为单个实例存在?意思是每个线程都具有自己的类的静态成员变量副本吗? 我的猜测是每个过程,对吗? 问题答案: 静态 字段 为每个类加载器提供一个值。 如果需要每个线程的值,请设置static 。

  • 问题内容: 我正在为基于Web的幻灯片显示构建应用程序,其中一个“主”用户可以在幻灯片之间移动,每个人的浏览器都可以跟随。为此,我使用websockets和Redis作为全局通道来发送消息。每个连接的客户端都将信息存储在数组中。然后,我有一个单独的线程用于订阅Redis通道,其中定义了一个“ on.message”块,该块应将消息发送给数组中的每个人,但是该数组在此块内为空(在该块中的其他任何地方

  • 问题内容: 在 多线程中 。我认为这是因为。这是唯一原因吗? 我知道。但为什么? 问题答案: 在多线程中,static没有意义。 恐怕你在做相反的陈述 。静态变量是一种共享资源,可用于在不同线程之间交换某些信息。而且,在访问这种共享资源时我们需要小心。因此,我们需要确保在多线程环境中对静态变量的访问是同步的。 每个线程都有自己的堆栈 这是正确的说法。堆栈仅保存局部变量,而不保存堆中的变量。静态变量

  • null 现在我想从这个函数返回那个值(C) 有什么解决办法吗?? 我知道c的span只在void main()中,如何从int main()返回c的值?