I have two threads and I want to make sure that I am synchronizing correctly in LinkedBlockingQueue. Is it correct? Or is explicit synchronization on (messageToCommsQueue) not necessary?
Declaration:
private LinkedBlockingQueue<BaseMessage> messagesToCommsQueue;
First method:
private void startOperationModeStatusMessageExecutor() { ScheduledExecutorService operationModeStatusExecutor = Executors.newSingleThreadScheduledExecutor(); operationModeStatusExecutor.scheduleAtFixedRate((new Runnable() { @Override public void run() { MT02OperationModeStatusMessage commsOperateMsg; commsOperateMsg = MessageFactory.getMT1102OperationModeStatusMessage(status.ordinal()); synchronized (messagesToCommsQueue) { messagesToCommsQueue.add(commsOperateMsg); } } }), 0, 10, TimeUnit.SECONDS); }
Method Two:
Executor commsSenderExecutor = Executors.newSingleThreadExecutor(); commsSenderExecutor.execute(new Runnable() { @Override public void run() { while (getStatus().equals(OperationModeStatus.INITIATE) || getStatus().equals(OperationModeStatus.OPERATE)) { BaseMessage m = null; try { synchronized (messagesToCommsQueue) { m = messagesToCommsQueue.take(); } } catch (InterruptedException e) {
source share