主要是比較offer跟poll兩個方法的性能,開N個線程,每個線程往隊列里寫或者取500個整數。
線程數 |
20 |
50 |
100 |
200 |
500 | 1000 |
LinkedBlockingQueue |
15,0 |
31,15 |
32,16 |
63,32 |
203,47 |
563,110 |
ArrayBlockingQueue | 15,0 |
16,15 |
31,15 |
47,16 |
125,47 |
364,68 |
PriorityBlockingQueue | 78,78 |
172,188 |
360,422 |
813,969 |
3094,2641 |
6547,5453 |
逗號前的數字是offer測試花費的時間,逗號后的數字是poll測試花費的時間,單位毫秒。
結論:
1、ArrayBlockingQueue性能優于LinkedBlockingQueue,但是LinkedBlockingQueue是無界的。
2、ArrayBlockingQueue和LinkedBlockingQueue的poll方法總是比offer方法快,并發越高,差距越大
3、ArrayBlockingQueue和LinkedBlockingQueue的性能遠高于PriorityBlockingQueue,顯然優先隊列在比較優先級上的操作上耗費太多
4、PriorityBlockingQueue的offer方法與poll方法的性能差距很小,基本維持在近似1:1