当我们使用诸如 ConcurrentLinkedQueue 甚至一些 BlockingQueue 之类的内置队列之一时,单个调用是原子的并且保证是线程安全的。但是当对 API 的 5 次调用中,有 4 次调用是单一的,但其中一次调用的形式为:
if(some condition)
{
queue.call();
}
此调用需要在同步块中,因为此操作是非原子的。但是引入这个调用不也意味着从现在开始对这个队列的所有访问,无论是读还是写都应该同步?
如果是,我是否可以假设一旦代码中出现一个非原子调用,这很可能,那么所有对花哨队列的访问都必须手动同步?