• Demo


    多线程学习笔记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速度)

  • 相关阅读:
    你真的理解正则修饰符吗?
    一个简单易用的容器管理平台-Humpback
    【译】参考手册-React组件
    【译】快速起步-组件与属性
    css可应用的渐进增强新特性
    javascript编程杂记
    ES6模块的import和export用法总结
    对于未来chrome80 samesite问题的兼容解决方案
    mogodb数据库简单的权限分配
    egg.js npm start 启动报错
  • 原文地址:https://www.cnblogs.com/kongw/p/13887260.html
Copyright © 2020-2023  润新知