多线程学习笔记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("
"+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("
高优先级线程计数到 "+mt1.count);
}
System.out.println("
低优先级线程计数到 "+mt2.count);
}
}
运行结果如下图高优先级线程达到100000000停止后低优先级才到566802
(这个程序的输出结果取决于运行程序的CPU速度)