Java多线程学习笔记2——多线程优先级调度
多线程学习笔记2——多线程优先级调度
使用setPriority()方法设置线程优先级,该方法是Thread的成员。通常形式为:
final void setPriority(int level)
level指定了调用线程的优先级设置,level的值必须在MIN_PRIORITY到MAX_PRIORITY范围内。通常是1-10。要返回一个默认优先级的线程,可以指定NORM_PRIORITY,通常值为5。这些优先级在Thread中都被定义成final形变量。
例子
该例子通过建立两个线程对象,并分别设置不同的优先级,输出这不同优先级线程统计的计数
class Priority implements Runnable{
int count;
Thread thrd;
static boolean stop = false;
static String currentName;
//创建一个新的线程,注意构造方法没有真正开始这个线程运行;
Priority(String name){
thrd = new Thread(this,name);
count = 0;
currentName = name;
}
//Begin execution of new thread 开始执行新的线程
public void run(){
System.out.println(thrd.getName());
do{
count++;
if (currentName.compareTo(thrd.getName())!=0){
currentName = thrd.getName();
System.out.println("在 "+currentName);
}
}while ((stop==false)&&(count<100000000));
stop = true;
System.out.println("\n"+thrd.getName()+" 结束");
}
}
public class PriorityDemo {
public static void main(String[] args) {
Priority mt1 = new Priority("高优先级");
Priority mt2 = new Priority("低优先级");
//设置优先级
mt1.thrd.setPriority(Thread.NORM_PRIORITY+2);
mt2.thrd.setPriority(Thread.NORM_PRIORITY-2);
//开始线程
mt1.thrd.start();
mt2.thrd.start();
try{
mt1.thrd.join();
mt2.thrd.join();
}catch (InterruptedException e){
System.out.println("主线程被打断.");
System.out.println("\n高优先级线程计数到 "+mt1.count);
}
System.out.println("\n低优先级线程计数到 "+mt2.count);
}
}
运行结果如下图高优先级线程达到100000000停止后低优先级才到566802
(这个程序的输出结果取决于运行程序的CPU速度)
作者:挑战风车的喵
个性签名:夜空中最亮的星, 请指引我前行!
如果觉得这篇文章对你有帮助的话, 记得在下面点个"推荐"哦~, 博主在此感谢!!!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.