Quantcast
Channel: Java ConcurrentHashMap and synchronization - Stack Overflow
Viewing all articles
Browse latest Browse all 3

Java ConcurrentHashMap and synchronization

$
0
0

Let's say that I have a ConcurrentHashMap of clients registered to a server (inside a class Server):

Map<ClientID, String> registeredClients = new ConcurrentHashMap<ClientID, String>();

In my registration method (inside the Server class) I have:

  public void synchronized register(ClientID client, String clientName) {        if(!registeredClients.containsKey(client))          registeredClients.put(client, clientName);  }

And in any other methods of the server, I always check at the beginning that the client is registered (to be sure that he is eligible to use the method):

if(!registeredClients.containsKey(client))  throw new UnknownClientException();

I have one server thread per client.

Have I to synchronize that check with something like this?

synchronized(registeredClients) {  if(!registeredClients.containsKey(client))    throw new UnknownClientException();}

I think I should because theoretically the client could register after having passed the if guard and before throwing the exception (making the exception actually wrong).

I am not quite how much the ConcurrentHashMap helps programmers with synchronization issues.


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images