如何在Java中的两个线程之间共享变量?

时间:2013-05-03 05:25:30

标签: java multithreading

我是一名学习Java的初学者。现在我有一个问题,有人可以帮我解决吗? :)

我有一个名为Server的类,它维护一个hashmap变量,我有两个名为send()和receive()的方法。我希望这两种方法同时运行。 send()方法将使用hashmap变量,而receive()方法将更改hashmap变量。

请帮忙解决。非常感谢!

5 个答案:

答案 0 :(得分:1)

您可以使用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
        //
    }
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

或者,您可以使用ConcurrentHashMap

答案 3 :(得分:0)

有两种解决方案,最简单的一种是使用线程安全的hashmap,即ConcurrentHashMap。您不必担心同步问题,因为JVM会处理它。 通过Javadoc会很好:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html

其他方法是同步send()和receive()方法或更新hashmap的方法部分。

答案 4 :(得分:0)

使用COncurrentHashMap

它允许从多个线程并发地修改Map,而无需阻止它们。