1

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

我很困惑这是否是正确的方法,因为为了更改/访问哈希图,我必须编写 getter 和 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
    } 

}

任何建议将不胜感激。谢谢。

4

1 回答 1

3

您的方法很好,但您应该使用ConcurrentMap, 或synchronize在地图上。第一种方法更好,因为同步集合经过优化,以便尽可能避免阻塞

于 2013-02-23T20:28:49.593 回答