【发布时间】:2013-06-25 10:11:48
【问题描述】:
我有一个主线程,我在其中定义了一个 HashMap 对象。现在在主线程中我正在创建 N 个线程。现在每个线程都将其结果附加到主线程的 HashMap 对象中并终止。我尝试在构造函数中传递 HashMap 对象,但是当我这样做时,每个线程都会制作 HashMap 对象的本地副本并对其进行编辑。此更改不会保存在主线程的 HashMap 对象中。我该怎么办?
在我的主要课程中
ThreadParallel threads[] = new ThreadParallel[N];
HashMap<Integer, String> map = new HashMap<Integer, String>();
for(int i=0;i<N;i++)
{
threads[i] = new ThreadParallel(map);
}
现在在 ThreadParallel 类中
public class ThreadParallel implements Runnable{
HashMap<Integer, String> map;
Thread t;
public ThreadParallel(HashMap<Integer, String> map) {
this.map = map;
t = new Thread(this);
t.start();
}
@Override
public void run() {
// adding data
}
}
【问题讨论】:
-
在构造函数中使用
this可能很危险,因为此时对象尚未完全构造。 -
您应该发布更多代码,因为从您提供的代码中不清楚如何创建多个地图。
标签: java multithreading shared-objects