并发学习计划-SynchronousQueue05

今天学习一下SynchronousQueue

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

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

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

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

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

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

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

synchronousQueue.size();

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

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

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

你可能感兴趣的:(并发学习计划-SynchronousQueue05)