Java线程 - 工作线程改变其老板的hashmap

时间:2013-02-23 20:24:41

标签: java multithreading sockets

我有一个监听请求的类(Server),一旦发出请求,就会启动一个处理它的新线程。处理程序线程将读入数据,将其存储到hashmap中并完成。我已经将hashmap放在服务器类中,因为当数据进入时,可以有多个处理程序线程读取数据。

我很困惑这是否是正确的方法,因为为了改变/访问hashmap,我必须编写getters& setter并将Server类传递给每个工作线程。尝试描述我的查询的一些示例代码:

public class Server implements Runnable {
        private HashMap<String, Integer> data;

    public void run() {
       while(true) {
            Socket s = serverSocket.accept();
            Handler h = new Handler(s);
            Thread t = new Thread(h);
            t.start();
       }
   }
}

public class Handler implements Runnable {

    public void run() {
        //read in data from socket
        data.put(d); //access the hashmap and insert data in
    } 

}

非常感谢任何建议。感谢。

1 个答案:

答案 0 :(得分:3)

您的方法很好,但您应该在地图上使用ConcurrentMapsynchronize。第一种方法更好,因为只要有可能,同步集合就是optimized in order to avoid blocking