【发布时间】:2012-05-04 19:29:06
【问题描述】:
在我的应用程序中,我有两个线程。线程 1 正在向线程 2 传输数据。数据传输后,线程 1 中的数据在线程 2 中被清除。线程 1 继续在 HashMap 中放置更多数据,以便稍后传输到线程 2。与此同时,线程 2 对数据进行了它需要做的事情。我下面的代码是线程 2 中发生线程之间数据传输的部分。整个应用程序工作得很好,但我的问题是,有没有更好的方法来为线程 2 制作线程 1 数据的副本,而不使用关键字 new 来创建一个全新的对象?
我认为这样做可能会导致发生更多垃圾收集?我不应该担心这个吗?
synchronized(this){
// Make a copy of the data map then clear it.
cachedData = new HashMap<String,ArrayList<Float>>(data);
data.clear();
}
【问题讨论】:
-
根据您的需要,您也许可以使用
Map.Entry-s 的某种同步队列而不是地图来实现更连续的数据传输。 -
我明白了,我回顾了一些我的旧帖子,删除了一个我意识到有点愚蠢的帖子,并对答案进行评级。感谢您与我分享这些信息。
标签: java multithreading copy hashmap deep-copy