我是一个学习Java的初学者。现在我有一个问题,有人可以帮我解决吗?:)
我有一个名为 Server 的类,它维护一个 hashmap 变量,它有两个名为 send() 和 receive() 的方法。我希望这两种方法同时运行。send() 方法将使用 hashmap 变量,而 receive() 方法将更改 hashmap 变量。
请帮忙解决。非常感谢!
我是一个学习Java的初学者。现在我有一个问题,有人可以帮我解决吗?:)
我有一个名为 Server 的类,它维护一个 hashmap 变量,它有两个名为 send() 和 receive() 的方法。我希望这两种方法同时运行。send() 方法将使用 hashmap 变量,而 receive() 方法将更改 hashmap 变量。
请帮忙解决。非常感谢!
您可以使用Collections.synchronizedMap(new HashMap());
编辑1:代码模板
public class Server
{
private static Map<String,String> map = Collections.synchronizedMap(new HashMap<String, String>());
public void send()
{
//
// Do some operation using map variable
}
public void receive()
{
// change the map variable as you want
//
}
}
在产生发送和接收线程的主线程中定义 HashMap。确保使用 SynchronizedMap 以免遇到竞争条件。
项目默认共享。您需要某种形式的锁或互斥锁来控制共享并防止两个线程同时尝试修改它。
或者,您可以只使用ConcurrentHashMap
有两种解决方案,最简单的一种是使用线程安全的hashmap,即ConcurrentHashMap。您不必担心同步问题,因为 JVM 会处理它。最好通过 Javadoc 进行相同的操作:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html
另一种方法是同步 send() 和 receive() 方法或更新哈希图的方法部分。
它允许从多个线程同时修改 Map 而无需阻塞它们。