首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

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

2012-03-15 
hashmap的get方法得到的值为空我用hashmap存放通信线程Java code//其中hm的key为用户名,value为对应的通信

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吧,

热点排行