资讯专栏INFORMATION COLUMN

JAVA多线程04-基础篇-优先级

suemi / 2975人阅读

摘要:一线程优先级线程优先级的范围是,默认优先级是,线程优先级的主要作用是让调度器优先调度高优先级线程,但这不意味着低优先级线程得不到执行,通常情况不需要修改线程优先级,类中有个优先级的常量二源码分析线程所属的线程组设置的级别不能大于且不能小于设

一、线程优先级

线程优先级的范围是1~10,默认优先级是5,线程优先级的主要作用是让调度器优先调度高优先级线程,但这不意味着低优先级线程得不到执行,通常情况不需要修改线程优先级,Thread类中有3个优先级的常量:

二、源码分析

public final void setPriority(int newPriority) {
      ThreadGroup g;//线程所属的线程组
      checkAccess();
      //设置的级别不能大于10且不能小于1
      if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {
            throw new IllegalArgumentException();
      }
      if((g = getThreadGroup()) != null) {
            //设置的级别不能大于所属线程组的最大级别
            if (newPriority > g.getMaxPriority()) {
                newPriority = g.getMaxPriority();
            }
          setPriority0(priority = newPriority);//本地方法
      }
}

三、线程优先级示例

public class ThreadPrioritiesDemo extends Thread {
      private int priority;
      public ThreadPrioritiesDemo(String name, int priority) {
            super(name);
            this.priority = priority;
      }
    public static void main(String[] args) {
          Thread t1 = new ThreadPrioritiesDemo("thread1", 1);
          Thread t2 = new ThreadPrioritiesDemo("thread2", 10);
          t1.start();
          t2.start();
    }
    @Override
    public void run() {
            Thread.currentThread().setPriority(priority);
                    for (int i = 0; i < 1000; i++) {
                        System.out.println(this + ":" + i);
                         if (i % 2 == 0)
                              Thread.yield();
                      }
          }
}

输出结果(截取部分):

Thread[thread1,1,main]:670
Thread[thread2,10,main]:293
Thread[thread2,10,main]:294
Thread[thread1,1,main]:671
Thread[thread1,1,main]:672
Thread[thread2,10,main]:295
Thread[thread2,10,main]:296
Thread[thread1,1,main]:673
Thread[thread1,1,main]:674
Thread[thread2,10,main]:297
Thread[thread2,10,main]:298
Thread[thread1,1,main]:675
Thread[thread1,1,main]:676
Thread[thread2,10,main]:299

3.1、结果说明

新开启2个线程,线程1优先级为1,线程2优先级为10,两个线程交替执行,高优先级线程(t2)并不是一直优先于t1执行

四、总结

高优先级线程并不是一直优于低优先级线程执行

欢迎加入学习交流群569772982,大家一起学习交流。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67861.html

相关文章

  • JAVA 线程和并发基础面试问答

    摘要:多线程和并发问题是技术面试中面试官比较喜欢问的问题之一。线程可以被称为轻量级进程。一个守护线程是在后台执行并且不会阻止终止的线程。其他的线程状态还有,和。上下文切换是多任务操作系统和多线程环境的基本特征。 多线程和并发问题是 Java 技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(...

    dreamans 评论0 收藏0
  • JAVA 线程和并发基础

    摘要:线程可以被称为轻量级进程。一个守护线程是在后台执行并且不会阻止终止的线程。其他的线程状态还有,和。上下文切换是多任务操作系统和多线程环境的基本特征。在的线程中并没有可供任何对象使用的锁和同步器。 原文:Java Multi-Threading and Concurrency Interview Questions with Answers 翻译:并发编程网 - 郑旭东 校对:方腾飞 多...

    vboy1010 评论0 收藏0
  • Java实战001-线程池ExecutorService

    线程池ExecutorService 一. new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就太out了,...

    dayday_up 评论0 收藏0
  • 线程三分钟就可以入个门了!

    摘要:系统级线程核心级线程由操作系统内核进行管理。值得注意的是多线程的存在,不是提高程序的执行速度。实现多线程上面说了一大堆基础,理解完的话。虚拟机的启动是单线程的还是多线程的是多线程的。 前言 之前花了一个星期回顾了Java集合: Collection总览 List集合就这么简单【源码剖析】 Map集合、散列表、红黑树介绍 HashMap就是这么简单【源码剖析】 LinkedHashMa...

    awkj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<