考虑以下代码片段:
public class A {
private final Executor executor = Executors.newCachedThreadPool();
private final Queue<Object> messageQueue = new ConcurrentLinkedQueue<M>();
public void sendMessage(Object message) {
messageQueue.offer(message);
executor.execute(new Runnable() {
@Override
public void run() {
final Object message = messageQueue.poll();
// Can message == null?
}
});
}
}
是否保证 messageQueue 在 Runnable 实例尝试检索消息时包含该消息?或者说得更笼统一点:JIT/JVM 可以根据 JMM 对两个函数调用重新排序吗?