SynchronousQueue容量爲0,就是這個東西它不是用來裝內容的,SynchronousQueue是專門用來兩個線程之間傳內容的,給線程下達任務的,老師講過一個容器叫Exchanger還有印象嗎,本質上這個容器的概念是一樣的。看下面代碼:
有一個線程起來等着take,裏面沒有值一定是take不到的,然後就等着。然後當put的時候能取出來,take到了之後能打印出來,最後打印這個容器的size-定是0,打印出aaa來這個沒問題。
那當把線程註釋掉,在運行一下程序就會在這阻塞,永遠等着。如果add方法直接就報錯,原因是滿了,這個容器爲0,你不可以往裏面扔東西。
這個Queue和其他的很重要的區別就是你不能往裏頭裝東西,只能用來阻塞式的put調用,要求是前面得有人等着拿這個東西的時候你纔可以往裏裝,但容量爲0,其實說白了就是我要遞到另外一個的手裏纔可以。
這個SynchronousQueue看似沒有用,其實不然,SynchronousQueue在線程池裏用處特別大, 很多的線程取任務,互相之間進行任務的一個調度的時候用的都是它。