【发布时间】:2012-07-27 11:43:16
【问题描述】:
我有一个 Java 代码,它通过以下方式在哈希表中搜索值:
class HTDemo {
public static void main(String args[]) {
Hashtable balance = new Hashtable();
double bal;
balance.put("John Doe", new Double(3434.34));
balance.put("Tom Smith", new Double(123.22));
balance.put("Jane Baker", new Double(1378.00));
balance.put("Todd Hall", new Double(99.22));
balance.put("Ralph Smith", new Double(-19.08));
**System.out.println("John Doe's balance: " + balance.get("John Doe"));**
**System.out.println("Tom Smith's balance: " + balance.get("Tom Smith"));**
**System.out.println("Jane Baker's balance: " + balance.get("Jane Baker"));**
}
}
现在,我想在多个线程上运行它,即我想以这样的方式修改代码,以便 get 方法(在 ** 内)同时工作。任何人都可以帮助我如何做到这一点。实际上,我遇到了传递哈希表并使其在运行时并发的问题。
【问题讨论】:
-
您的问题是“如何创建新线程?”或“如何安全地处理对共享数据的多线程访问?”
-
@DNA,第二个。我想知道如何修改该代码以安全地处理它。
-
你的问题不够精确。如果你在一个线程中填充地图,然后启动只从地图中读取的线程,你不需要做任何事情。如果您以读写方式访问它并且一次只对单个条目感兴趣,因为 Hashtable 是同步的,您不需要做任何事情。在其他情况下(例如原子地添加或获取两个条目,则需要特殊同步。您的问题太模糊而无法回答。
标签: java multithreading concurrency hashtable