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