java - 如何在多线程环境中强制每个对象都有自己的状态? ( java )

标签 java multithreading

我拥有的 3 个类的示例(Start 是带有 main() 的类):

class A{

protected Map<String, String> map;

public A(File input){
 map = new HashMap<String, String>();
 updateMap(input);
}

private void updateMap(File input){..}

}


class Start{

private MultiThreadedClass newThread;
...
for(int i=0;i< numOfThreads; i++)
 newThread = MultiThreadedClass(file[i]);
 newThread.start();
}


class MultiThreadedClass extends Thread{
...
 public void run(){
    A a = new A(file);
 }
}

这是我的问题 - 每个线程都有一个不同的文件,它的工作是执行 updateMap 方法并根据该文件更新 map 。该映射必须仅包含一个文件中的值。给定的实现是否强制执行这一点?当实现这个时,我的想法是,每个线程的新 A() 调用将保证每个线程都有自己的映射,即使两个线程同时更新映射,每个线程也只更新自己的副本。但我不确定这是否正确。

谢谢!

最佳答案

你的预感是正确的。每次调用“new ClassName”时,都会在内存中为您指定的 ClassName 的对象分配空间。其他线程能够访问此内存的唯一方法是您使其可用,或者将其作为参数传递给另一个函数,将其引用分配给线程类的公共(public)成员变量,或者从公共(public)成员函数返回它您的线程类(将其分配给您的类的成员字段之后)。

由于您已在 run 函数中本地创建了该对象,并且您没有保留对 A 类的任何引用作为 Thread 类的成员,因此其他人可以获取 A 对象的唯一方法是:您将它作为参数传递给另一个方法,该方法会执行一些操作来保留该值。

当 run 函数完成并且执行退出该方法时,A 对象将不再存在,您在 A 对象内部创建的 Map 也将不再存在。

关于java - 如何在多线程环境中强制每个对象都有自己的状态? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801974/

相关文章:

java - 当接口(interface)完全抽象时,为什么说接口(interface)支持多重继承?

Java加速进程/线程

C:在多个线程中使用不同的文件描述符在不同位置打开文件

multithreading - "locks are an expensive operation"经常被说出来的原因是什么?

Java 并发 : Run until terminated

Java如何使用另一个类的实例访问方法

java - 无法修复错误 : Cannot resolve symbol 'OnClickListener'

java - 如何在 Lombok 调用 super 构造函数

使用线程的并发 TCP 服务器

c# - 如何处理这种竞争条件?