我有一个监听请求的类(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
}
}
非常感谢任何建议。感谢。
答案 0 :(得分:3)
您的方法很好,但您应该在地图上使用ConcurrentMap
或synchronize
。第一种方法更好,因为只要有可能,同步集合就是optimized in order to avoid blocking。