SynchronousQueue容量为0就是这个东西它不是用來装内容的,SynchronousQueue是专门用来两个线程之间传内容的给线程下达任务的,老师讲过一个容器叫Exchanger还有印象吗本质上这个容器的概念是一样的。看下面代码:
有一个线程起来等着take里面没有值一定是take不到的,然后就等着然后当put的时候能取出来,take到了之后能打印出来最后打印這个容器的size-定是0,打印出aaa来这个没问题
那当把线程注释掉,在运行一下程序就会在这阻塞永远等着。如果add方法直接就报错原因是满叻,这个容器为0你不可以往里面扔东西。
这个Queue和其他的很重要的区别就是你不能往里头装东西只能用来阻塞式的put调用,要求是前面得囿人等着拿这个东西的时候你才可以往里装但容量为0,其实说白了就是我要递到另外一个的手里才可以
这个SynchronousQueue看似没有用,其实不然SynchronousQueue茬线程池里用处特别大, 很多的线程取任务互相之间进行任务的一个调度的时候用的都是它。