Java 来自一个主机线程的多个线程修改主机线程中的同一对象

Java 来自一个主机线程的多个线程修改主机线程中的同一对象,java,multithreading,collections,Java,Multithreading,Collections,我试图从一个“主机”线程启动N个线程,当它们执行时,它们必须向原始“主机”线程中的同一集合添加元素。(执行一个compare方法,如果返回true,则将要比较的元素添加到集合中) 现在,如果我有X个“主机”线程,那么有没有办法区分主机线程中集合的X个实例,或者是保持映射的唯一方法,其中X个条目将“主机”线程映射到其各自的集合?这似乎是一种非常隐蔽的方式。看看线程调用。这是一种让每个主机线程都有一个对象的唯一实例的方法——在本例中是您的集合 您可能需要ThreadLocal来允许每个主机线程拥有自

我试图从一个“主机”线程启动N个线程,当它们执行时,它们必须向原始“主机”线程中的同一集合添加元素。(执行一个compare方法,如果返回true,则将要比较的元素添加到集合中)


现在,如果我有X个“主机”线程,那么有没有办法区分主机线程中集合的X个实例,或者是保持映射的唯一方法,其中X个条目将“主机”线程映射到其各自的集合?这似乎是一种非常隐蔽的方式。

看看线程调用。这是一种让每个主机线程都有一个对象的唯一实例的方法——在本例中是您的集合

您可能需要ThreadLocal来允许每个主机线程拥有自己版本的集合

为什么不同的实例与每个主机线程关联?每个主机线程与什么关联?(例如,如果每个主机线程都与一个特定的数据库/连接/客户机/任何对象相关联,那么数据库/连接/客户机/任何对象的类都应该保存集合。)主机线程不能告诉它启动的其他线程,“这是我正在使用的此集合类型的特定实例吗?”我试图比较在初始化时从SQL查询创建的潜在大量二叉树。这个想法是一次性创建所有树,这样您就不必在运行时再次查询数据库。我认为,因为每棵树都有大量的节点,所以并行比较它们是有意义的。现在,如果我想并行执行多个树比较,并提取各自集合中的所有重复节点,该怎么办?这是我身边/宠物项目的一部分。编辑:我基本上是想为每个比较保留一个单独的集合。首先,发布一些代码来告诉我们你在说什么。其次,集合不能位于线程中。集合在堆中。您可能有一个指定的线程以某种方式负责收集,但这不是包含关系。