[Java]线程的优先级问题,困扰多日,已解决!

/*线程的优先级=======================================================
在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

发布了15 篇原创文章 · 获赞 1 · 访问量 4134

猜你喜欢

转载自blog.csdn.net/jsqdsq/article/details/78240468