I am not quite sure about how to use a synchronized block correctly. I know that using the synchronized keyword locks the whole class. So that is not want I want. I want to lock the single methods within the class. Here is an example from my class.
//class does only contain static methods
public class MessageFactory implements IValues {
public static Message createRegisterRequest(String name, String password) {
Payload payload = createPayload(name, password);
return new Message(VALUE_REGISTRATION, payload);
}
}
How do I correctly use a synchronize block to lock the whole method? Can I choose any parameter (or name or password)? Is there any difference between:
public static Message createRegisterRequest(String name, String password) {
synchronized(name){
Payload payload = createPayload(name, password);
return new Message(VALUE_REGISTRATION, payload);
}
}
and:
public static Message createRegisterRequest(String name, String password) {
synchronized(password){
Payload payload = createPayload(name, password);
return new Message(VALUE_REGISTRATION, payload);
}
}
and:
public static Message createRegisterRequest(String name, String password) {
Object lock = new Object();
synchronized(lock){
Payload payload = createPayload(name, password);
return new Message(VALUE_REGISTRATION, payload);
}
}
createPayload is not accessing anything shared. It looks like:
private static Payload createPayload(int playerID, String roomName){
Payload payload = new Payload();
payload.setPlayerID(playerID);
payload.setRoomName(roomName);
return payload;
}
I thought that I have to synchronize the methods as there a multiple instances accessing the methods within MessageFactory at the same time. Please let me know if I am wrong.