昨天我去面試,問他SynchronousQueue沒答上來

SynchronousQueue容量爲0,就是這個東西它不是用來裝內容的,SynchronousQueue是專門用來兩個線程之間傳內容的,給線程下達任務的,老師講過一個容器叫Exchanger還有印象嗎,本質上這個容器的概念是一樣的。看下面代碼:

昨天我去面試,問他SynchronousQueue沒答上來

 

有一個線程起來等着take,裏面沒有值一定是take不到的,然後就等着。然後當put的時候能取出來,take到了之後能打印出來,最後打印這個容器的size-定是0,打印出aaa來這個沒問題。

那當把線程註釋掉,在運行一下程序就會在這阻塞,永遠等着。如果add方法直接就報錯,原因是滿了,這個容器爲0,你不可以往裏面扔東西。

這個Queue和其他的很重要的區別就是你不能往裏頭裝東西,只能用來阻塞式的put調用,要求是前面得有人等着拿這個東西的時候你纔可以往裏裝,但容量爲0,其實說白了就是我要遞到另外一個的手裏纔可以。

這個SynchronousQueue看似沒有用,其實不然,SynchronousQueue在線程池裏用處特別大, 很多的線程取任務,互相之間進行任務的一個調度的時候用的都是它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章