I have switch case in a while loop. Whereas one case has a synchronized blocked in it followed by break statement. This break statement is causing the loop to break instead of case. Below is the code.
while (!shutdown && !Thread.currentThread().isInterrupted()) {
try {
logger.info("Trying to Read message");
ServerResponseMessage response = gson.fromJson(jsonReader, ServerResponseMessage.class);
logger.info("Message Reading completed.");
if(response == null) {
logger.info("Received EOS Response, closing thread.");
break;
}
switch (response.getRequestType()) {
/* GET request type is considered as the request for the new object */
case GET:
object = response.getObject();
synchronized (requestLock) {
requestLock.notifyAll();
}
break;
/*
* If client receives HEARTBEAT message from Server, client need to response as
* Ack.
*/
case HEARTBEAT:
logger.info("Received Hearbeat");
ServerResponseMessage message = new ServerResponseMessage(RequestType.HEARTBEAT_ACK, null);
JsonWriter jsonWriter = new JsonWriter(new OutputStreamWriter(serverSocket.getOutputStream()));
jsonWriter.jsonValue(new Gson().toJson(message));
jsonWriter.flush();
logger.info("Sent Hearbeat Ack");
break;
default:
break;
}
logger.info("Completed reading.");
} catch (IOException e) {
logger.warn("Error while reading client", e);
shutdown = true;
}
}
In the above code the GET case causes loop break, as per log it directly jumps out of while loop after notifyAll method. Please help.Thanks in advance.