(十二)java并发编程--线程优先级

线程优先级并不确保执行顺序,高优先级线程获取CPU资源概率大,但低优先级线程仍有执行机会。默认优先级为5,子线程继承父线程优先级。代码示例显示,线程2执行次数多于线程1,但不绝对在前。调试时可观察当前及挂起线程。结论:优先级高低仅影响概率,不决定顺序。
摘要由CSDN通过智能技术生成

线程的优先级并不能保证现成的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的也并不是没有机会执行。

优先级用1-10的整数表示,数值越大优先级越高,默认优先级为5。

在一个线程中开启另外一个线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。

如下代码中,

package thread_priority;

/**
 * Created by fang on 2017/12/3.
 * 线程优先级.
 * MAX_PRIORITY 10
 * NORM_PRIORITY 5
 * MIN_PRIORITY 1
 * setPriority()方法是设置优先级.getPriority()是获取优先级.
 * 不是绝对的优先级,是概率,优先级高概率高,但不代表绝对的先后顺序.
 */
public class ThreadMain2 {
    public static void main(String[] args) throws InterruptedException {
        //两个线程没有任何的优先级.
        MyThread myThread =  new MyThread();
        Thread proxy = new Thread(myThread,"挨踢1");

        MyThread myThread2 =  new MyThread();
        Thread proxy2 = new Thread(myThread2,"挨踢2");

        //设置优先级
        //会看到proxy2 执行的多,但是并不代表先后顺序,proxy也有执行在前面的.
        proxy.setPriority(Thread.MIN_PRIORITY);
        proxy2.setPriority(Thread.MAX_PRIORITY);
        proxy.start();
        proxy2.start();
        Thread.sleep(100);
        myThread.stop();
        myThread2.stop();
    }

}

package thread_priority;

/**
 * Created by fang on 2017/12/3.
 *
 */
public class MyThread implements Runnable {
    private boolean flag = true;

    private int num = 0;
    public void run(){
        while (flag){
            System.out.println(Thread.currentThread().getName() + "-->" + num++);
        }
    }

    public void stop(){
        this.flag = !this.flag;
    }

}

执行结果如下(一部分执行结果):并不是所有的第二个线程都在线程1的输出之前,但是明显线程2打印的较多,也就是线程2
执行的概率较多。

挨踢2-->0
挨踢2-->1
挨踢1-->0
挨踢2-->2
挨踢1-->1
挨踢2-->3
挨踢1-->2
挨踢2-->4
挨踢2-->5
挨踢2-->6
挨踢2-->7
挨踢2-->8
挨踢2-->9
挨踢2-->10
挨踢2-->11
挨踢2-->12
挨踢2-->13
挨踢2-->14
挨踢2-->15
挨踢2-->16

我们也可以在编译器中断点调试,在调试过程中可以调试的当前线程和被挂起的线程。

总结:
优先级高的线程不一定执行在前面,只是概率高,优先级低的也不一定会在后面。感觉有些人生哲理了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值