/*线程的优先级=======================================================
在Java的线程中,所有的线程在运行前都会保持在就绪状态,
此时,哪个线程的优先级高,哪个线程就有可能会先被执行.
但经过代码测试,发现并不是这样的,原因是什么呢?
网上很多人的解释都是错误的.
最高:MAX_PRIORITY
中等:NORM_PRIORITY
最低:MIN_PRIORITY
*/
class MyThread implements Runnable{ // 实现Runnable接口
public void run(){ // 覆写run()方法
for(int i=0;i<5;i++){
try{
Thread.sleep(500) ; // 线程休眠
}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()
+ "运行,i = " + i) ; // 取得当前线程的名字
}
}
};
public class ThreadPriorityDemo{
public static void main(String args[]){
Thread t1 = new Thread(new MyThread(),"线程A") ; // 实例化线程对象
Thread t2 = new Thread(new MyThread(),"线程B") ; // 实例化线程对象
Thread t3 = new Thread(new MyThread(),"线程C") ; // 实例化线程对象
t1.setPriority(Thread.MIN_PRIORITY) ; // 优先级最低
t2.setPriority(Thread.MAX_PRIORITY) ; // 优先级最高
t3.setPriority(Thread.NORM_PRIORITY) ; // 优先级中等
t1.start() ; // 启动线程
t2.start() ; // 启动线程
t3.start() ; // 启动线程
}
};
/*
线程B运行,i = 0
线程A运行,i = 0
线程C运行,i = 0
线程B运行,i = 1
线程A运行,i = 1
线程C运行,i = 1
线程B运行,i = 2
线程C运行,i = 2
线程A运行,i = 2
线程B运行,i = 3
线程C运行,i = 3
线程A运行,i = 3
线程B运行,i = 4
线程A运行,i = 4
线程C运行,i = 4
按程序,优先级是B>C>A,但是,程序输出并没有按照这个优先级进行.这个原因并不是优先级失效了,而是因为你的处理器是多核的。
这段代码在单核CPU上一定是BCA的,但是现在处理器都是多核的,多核CPU是可以真正实现多个线程同时运行的,而不是简单的快速切换的假象,每个核心都能够负责一个线程。
你可以把你的CPU核心关掉一些,只留下一个核心工作,再运行这个。
关闭多核CPU核心的方法:(测试完了记得改过来)
开始,运行,输入:MSCONFIG再点 BOOT.INI 找到高级选项,点开 /NUMPROC9(N)= 里面只选1就关掉另外的核了,如果你是四核,里面有1 2 3 4可选,点2就是只能当双核用,以此类推。
感谢:http://bbs.csdn.net/topics/390502387