你的想法确实是没有错的,线程的优先级是这样:Every thread has a priority. Threads with higher priority are executed in preference to threads with lower priority.
但是为什么会出现 A,C,B 的执行顺序呢?原因应该在于在你的main中的语句顺序,在C启动之前,A线程已经执行完成了。所以出现了 ACB 的顺序。正常的当然应该是 CAB 的顺序了。
ACB和CAB这两种顺序可能会随机地出现。你并不能控制。如果你想验证优先级的话,就必须避免这点,你可以在run()方法的第一句执行:
<<try {Thread.sleep(1000);}catch(InterruptedException ex){}>>
这样就可以能够保证C启动之前A还在运行,这样你就可以得到CAB这样的正确顺序了。:)
但是为什么会出现 A,C,B 的执行顺序呢?原因应该在于在你的main中的语句顺序,在C启动之前,A线程已经执行完成了。所以出现了 ACB 的顺序。正常的当然应该是 CAB 的顺序了。
ACB和CAB这两种顺序可能会随机地出现。你并不能控制。如果你想验证优先级的话,就必须避免这点,你可以在run()方法的第一句执行:
<<try {Thread.sleep(1000);}catch(InterruptedException ex){}>>
这样就可以能够保证C启动之前A还在运行,这样你就可以得到CAB这样的正确顺序了。:)
我copy你的过去,结果是cab啊
---------------------
to xiaohaiz(老土进城,两眼通红)原因应该在于在你的main中的语句顺序,在C启动之前,A线程已经执行完成了。所以出现了 ACB 的顺序
-----------------------------
这句话我觉得不对,在main中,仅仅是进入队列,并没有启动况且都按你说的abc都按顺序start了才能按顺序的话,还要优先级做什么啊:——)
<<这句话我觉得不对,在main中,仅仅是进入队列,并没有启动>>
呵呵,谁说没有启动,再好好看看:
<<
First.start();
Second.start();
Third.start();
>>
:)
呵呵,那到不一定,Thread.NORM_PRIORITY+0 也通常会出现上述的情况的。
俺做实验的系统也是inetl+win32,估计你使用的vm也是 HotSpot。
b 6
c 10
c 10
b 6
a 1
a 1