mai*_*rgs 4 java multithreading thread-safety executor
我有两个线程,我想确保我在 LinkedBlockingQueue 上正确执行同步。这是正确的吗?或者 (messageToCommsQueue) 上的显式同步不需要吗?
宣言:
private LinkedBlockingQueue<BaseMessage> messagesToCommsQueue;
Run Code Online (Sandbox Code Playgroud)
方法一:
private void startOperationModeStatusMessageExecutor() {
ScheduledExecutorService operationModeStatusExecutor = Executors.newSingleThreadScheduledExecutor();
operationModeStatusExecutor.scheduleAtFixedRate((new Runnable() {
@Override
public void run() {
ModeStatusMessage commsOperateMsg;
commsOperateMsg = MessageFactory.getModeStatusMessage(status.ordinal());
synchronized (messagesToCommsQueue) {
messagesToCommsQueue.add(commsOperateMsg);
}
}
}), 0, 10, TimeUnit.SECONDS);
}
Run Code Online (Sandbox Code Playgroud)
方法二:
Executor commsSenderExecutor = Executors.newSingleThreadExecutor();
commsSenderExecutor.execute(new Runnable() {
@Override
public void run() {
while (getStatus().equals(ModeStatus.INITIATE) || getStatus().equals(ModeStatus.OPERATE)) {
BaseMessage m = null;
try {
synchronized (messagesToCommsQueue) {
m = messagesToCommsQueue.take();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
346 次 |
最近记录: |