如何在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 
     // 
    } 
} 
+0

你能给我一个我的问题的代码模板?我真的不知道如何编写代码。 Thx – user2193727 2013-05-03 06:46:07

+0

感谢您的代码!我怎么让这两种方法同时运行? – user2193727 2013-05-03 07:03:00

+0

你在多线程环境中运行你的程序? – prasanth 2013-05-03 07:21:13

项目由默认共享。你需要的是某种形式的锁或互斥来控制共享,并防止两个线程同时尝试修改它。

或者,你可以只使用ConcurrentHashMap

+0

你能给我一个我的问题的代码模板?我真的不知道如何编写代码。 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中的方法的部分。

+0

可以给我一个我的问题的代码模板?我真的不知道如何编写代码。 Thx – user2193727 2013-05-03 06:53:37

在生成发送和接收线程的主线程中定义HashMap。确保你使用了SynchronizedMap,这样你就不会遇到竞争状态。

+0

可以给我一个我的问题的代码模板?我真的不知道如何编写代码。 Thx – user2193727 2013-05-03 06:42:55

+0

此问题已被询问。您可以查看顶部列出的问题。如果你仍然有麻烦,我们可以帮你解决。 – 2013-05-03 12:17:12

使用COncurrentHashMap

它可以从多个线程地图的并发修改,而不需要阻止他们。