日期:2014-05-20  浏览次数:20865 次

hashmap的get方法得到的值为空
我用hashmap存放通信线程
Java code

//其中hm的key为用户名,value为对应的通信线程,hashmap定义在ManagerClientSocket中
public class ManagerClientSocket {
    //用hashmap来存放各个客户端与服务器的连接socket,并用客户名标识这些socket
    public static  HashMap<String,SerConClientThread> hm=new HashMap<String,SerConClientThread>();
    //存存放线程
    public static void addClientSocket(String uid,SerConClientThread sc){
        hm.put(uid, sc);
    }
         //取得线程
    public static SerConClientThread getClientSocket(String uid){
        return (SerConClientThread)hm.get(uid);
    }
        
}



然后我在服务器类Server中存进线程,代码如下:
Java code

//SerConClientThread是一个线程类,用于实现客户端与服务器的连接
SerConClientThread scct=new SerConClientThread(s);
ManagerClientSocket.addClientSocket(u.getUsername(), scct);





最后我在SerConClientThread类中去hm中取值,却总是取得null,代码如下:
Java code
SerConClientThread sc=ManagerClientSocket.getClientSocket(u.getUsername()); //取线程





请教网友,这是哪里出了问题?

------解决方案--------------------
不多说了 你建一个类 放一个static的map就可以保存map的值?
put一次 就那里都可以get?
------解决方案--------------------
典型的同步问题,hashmap是线程不安全的,当放和取同时进行就会出问题。

两个方法前加上synchronized,就ok了
------解决方案--------------------
补充一下,加上synchronized性能会下降。

结帖吧
------解决方案--------------------
加个static吧,