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