今天学习一下SynchronousQueue
看名字先猜一下这个东西是干啥的,Synchronous同步的,Queue队列,翻译过来同步的队列。
队列就队列呗,为啥还有个同步的。
这个队列不是个啥正经队列,因为这个队列没有容量,神奇吧,没有容量居然还好意思叫队列。
这个东西只允许放一个东西,如果你要连续放两个东西进去,对不起,只让进一个,啥时候把第一个拿出来,再把第二个放进去。
我们来看看这个类长啥样:
public class SynchronousQueue<E> extends AbstractQueue<E>
implements BlockingQueue<E>, java.io.Serializable
看到了吧,这个类实现了BlockingQueue接口,说明这个类有阻塞的功能,有点类似我上次说的《ArrayBlockingQueue和LinkedBlockingQueue》,不过区别就是,这个队列,容量没有,其实说容量没有也不准确,因为毕竟可以放一个进去,但是如果你使用:
synchronousQueue.size();
这个来获取队列大小,不好意思,永远都给你返回一个0,头就是这么铁。
所以如果使用他来装东西你就别想了,只能装一个,诶!只能装一个,不就达到同步的效果了吗,如果要操作一个需要线程安全的东西,用这个东西封装一下,不就安全了吗。保证只能进一个,然后再take出来,就可以操作东西了啊。
由于这个东西思想很简单用起来也很简单,所以就不写代码例子了,不过内部源码的实现倒是很复杂,毕竟同步是个挺厉害的东西。