4
J'ai deux threads, et je veux m'assurer que je fais la synchronisation correctement sur LinkedBlockingQueue. Est-ce correct? Ou la synchronisation explicite sur (messageToCommsQueue) n'est-elle pas nécessaire?Est-ce que cela nécessite une synchronisation explicite?
Déclaration:
private LinkedBlockingQueue<BaseMessage> messagesToCommsQueue;
méthode:
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);
}
Méthode Deux:
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});