setPriority 方法

setPriority 方法 能够给线程设置优先级, 优先级最高为10,最低为1。优先级越高,越有可能优先执行,但线程执行顺序仍具有不确定性,并不能保证优先级高的一定先执行。

我们编写了一个 Join 类,还是用来输出数字0-9。

public class Priority implements  Runnable{

    //线程的启动需要重写 run 方法
    @Override
    public void run(){
         
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+"线程正在执行"+"第"+i+"次for循环");
        }
    }
}

我们编写了一个测试类 PriorityThreadDemo, 设置 线程 t1 优先级为1,也可以用 常量 Thread.MIN_PRIORITY 来表示,设置 线程 t2 优先级为10,也可以用 常量 Thread.MAX_PRIORITY 来表示。

public class PriorityThreadDemo {

    public static void main(String[] args) {
        int mainPriority = Thread.currentThread().getPriority();
        System.out.println("主线程的优先级为:"+mainPriority);

        Priority  pt =new Priority ();

        Thread t1= new Thread(pt,"thread 1");
        t1.setPriority(1);
        t1.setPriority(Thread.MIN_PRIORITY);//和上一句等价

        Thread t2= new Thread(pt,"thread 2");
        t2.setPriority(Thread.MAX_PRIORITY );//和上一句等价

        t1.start();
        t2.start();

        //优先级设置后,运行的顺序并不绝对,依然由操作系统决定

    }
}

可以看出,虽然我们设置了 t2 的优先级为最高10, t1 的优先级 为最低1,但是实际执行过程中并不能保证 t2 线程一定优先于 t1 线程的,只能说 t2 执行比较有可能 抢占 t1 的机会。

Last updated

Was this helpful?