如何在Java中的两个线程之间共享变量?
我是一个初学Java的人。现在我有一个问题,有人可以帮我解决吗? :)如何在Java中的两个线程之间共享变量?
我有一个名为服务器的类,它维护一个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
//
}
}
项目由默认共享。你需要的是某种形式的锁或互斥来控制共享,并防止两个线程同时尝试修改它。
或者,你可以只使用ConcurrentHashMap
你能给我一个我的问题的代码模板?我真的不知道如何编写代码。 Thx – user2193727 2013-05-03 06:48:07
有两个解决方法,最简单的一种是使用线程安全的HashMap即ConcurrentHashMap的。 JVM会照顾它,您不必担心同步问题。 这将是很好的经历的Javadoc相同:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html
另一种方式是同步send()和接收()方法,或者你在哪里更新HashMap中的方法的部分。
可以给我一个我的问题的代码模板?我真的不知道如何编写代码。 Thx – user2193727 2013-05-03 06:53:37
在生成发送和接收线程的主线程中定义HashMap。确保你使用了SynchronizedMap,这样你就不会遇到竞争状态。
可以给我一个我的问题的代码模板?我真的不知道如何编写代码。 Thx – user2193727 2013-05-03 06:42:55
此问题已被询问。您可以查看顶部列出的问题。如果你仍然有麻烦,我们可以帮你解决。 – 2013-05-03 12:17:12
你能给我一个我的问题的代码模板?我真的不知道如何编写代码。 Thx – user2193727 2013-05-03 06:46:07
感谢您的代码!我怎么让这两种方法同时运行? – user2193727 2013-05-03 07:03:00
你在多线程环境中运行你的程序? – prasanth 2013-05-03 07:21:13