不同的Java Api使用不同的静态存储?
问题描述:
我写在Java中一个静态实例:不同的Java Api使用不同的静态存储?
public class SocketMap {
private static SocketMap instance = new SocketMap();
public static SocketMap getInstance(){
return instance;
}
static Map<String, Socket> socketMap = new HashMap<>();
public static Map<String, Socket> getSocketMap() {
return socketMap;
}
}
及用途:
public Socket getConnection(String token, String signKey) {
synchronized (lock) {
if (SocketMap.getSocketMap().containsKey(signKey)){//single api will went here
return SocketMap.getSocketMap().get(signKey);
}
else {//second api will went here first
//todoSocket
SocketMap.getSocketMap().put(signKey, socket);
System.out.print("new Socket");
return socket;
}
}
}
//它正常工作时,我叫一个单一的API使用的getConnection method.But //后,我调用另一个带有相同signKey的api,SocketMap什么都不显示。
这是我的错。断开连接后我删除了两次套接字;只有一个静态存储是事实。
答
您是否在寻找类似于下面的代码? (我改变了参数token
与socket
public void testMethod(){
Socket s = new Socket();
Socket s1 = getConnection(s, "firstKey");
Socket s2 = getConnection(s, "firstKey");
if(s1 == s2){
System.out.println("I got the same value");
}else{
System.out.println("I got the different value");
}
}
public Socket getConnection(Socket socket, String signKey) {
synchronized (lock) {
if (SocketMap.getSocketMap().containsKey(signKey)){//single api will went here
return SocketMap.getSocketMap().get(signKey);
}
else {//second api will went here first
//todoSocket
SocketMap.getSocketMap().put(signKey, socket);
System.out.println("new Socket");
return socket;
}
}
}
这将始终打印“我得到了相同的价值”
如果这是没有帮助的,请分享你打电话来getConnection
+0
Thanks.It是我的错。 – Lyle
我的方式m投票结束这个问题作为题外话,因为用户回答他自己的问题(最后一行) –