Fork me on GitHub
~~~~~~~~~小喵喵已自动为您屏蔽了广告哦~~~~~~~~~

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速度)

posted @ 2020-10-27 20:11  走路带风Test  阅读(182)  评论(0编辑  收藏  举报
Demo
Return Top