2017-09-29 34 views
3

我写在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什么都不显示。

这是我的错。断开连接后我删除了两次套接字;只有一个静态存储是事实。

+3

我的方式m投票结束这个问题作为题外话,因为用户回答他自己的问题(最后一行) –

回答

1

您是否在寻找类似于下面的代码? (我改变了参数tokensocket

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

相关问题