不一定,优先级高的线程有更大的概率先执行,但并不保证优先级高的线程一定先执行。
PriorityBlockingQueue中的对象要实现Comparable接口
下面的结果是《Java编程思想》中关于PriorityBlockingQueue代码的部分执行结果 (稍微修改了一点,p表示设置的优先级) :
p=[9 ] Task id=5
p=[9 ] Task id=13
p=[9 ] Task id=14
p=[8 ] Task id=10
p=[8 ] Task id=15
p=[8 ] Task id=16
p=[8 ] Task id=0
p=[8 ] Task id=19
p=[8 ] Task id=11
p=[8 ] Task id=6
p=[7 ] Task id=9
p=[5 ] Task id=1
p=[3 ] Task id=2
p=[2 ] Task id=8
p=[1 ] Task id=12
p=[1 ] Task id=17
p=[1 ] Task id=4
p=[1 ] Task id=3
p=[0 ] Task id=7
p=[0 ] Task id=18
p=[10 ] Task id=20
p=[10 ] Task id=21
p=[10 ] Task id=22
p=[10 ] Task id=23
p=[10 ] Task id=24
p=[10 ] Task id=25
p=[10 ] Task id=26
p=[10 ] Task id=27
p=[10 ] Task id=28
p=[10 ] Task id=29
p=[9 ] Task id=39
p=[8 ] Task id=38
p=[7 ] Task id=37
p=[6 ] Task id=36
p=[5 ] Task id=35
p=[4 ] Task id=34
p=[3 ] Task id=33
p=[2 ] Task id=32
p=[1 ] Task id=31
p=[0 ] Task id=30