并发学习计划-SynchronousQueue05

今天学习一下SynchronousQueue

看名字先猜一下这个东西是干啥的,Synchronous同步的,Queue队列,翻译过来同步的队列。

队列就队列呗,为啥还有个同步的。

这个队列不是个啥正经队列,因为这个队列没有容量,神奇吧,没有容量居然还好意思叫队列。

这个东西只允许放一个东西,如果你要连续放两个东西进去,对不起,只让进一个,啥时候把第一个拿出来,再把第二个放进去。

我们来看看这个类长啥样:

public class SynchronousQueue<E> extends AbstractQueue<E>
    implements BlockingQueue<E>, java.io.Serializable

看到了吧,这个类实现了BlockingQueue接口,说明这个类有阻塞的功能,有点类似我上次说的《ArrayBlockingQueue和LinkedBlockingQueue》,不过区别就是,这个队列,容量没有,其实说容量没有也不准确,因为毕竟可以放一个进去,但是如果你使用:

synchronousQueue.size();

这个来获取队列大小,不好意思,永远都给你返回一个0,头就是这么铁。

所以如果使用他来装东西你就别想了,只能装一个,诶!只能装一个,不就达到同步的效果了吗,如果要操作一个需要线程安全的东西,用这个东西封装一下,不就安全了吗。保证只能进一个,然后再take出来,就可以操作东西了啊。

由于这个东西思想很简单用起来也很简单,所以就不写代码例子了,不过内部源码的实现倒是很复杂,毕竟同步是个挺厉害的东西。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容