当前位置: 代码迷 >> Java相关 >> hashmap的get方法得到的值为空,该如何处理
  详细解决方案

hashmap的get方法得到的值为空,该如何处理

热度:5613   发布时间:2013-02-25 21:49:19.0
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吧,
  相关解决方案