• Java线程优先级(Priority)


    1、线程一

     1 package com.cn.donleo.thread.priority;
     2 
     3 import java.util.concurrent.Callable;
     4 
     5 /**
     6  * @author liangd
     7  * date 2020-10-31 15:25
     8  * code
     9  */
    10 public class MyThreadOne extends Thread {
    11 
    12     MyThreadOne(String name) {
    13         super(name);
    14     }
    15 
    16     @Override
    17     public void run() {
    18         for (int i = 0; i < 20; i++) {
    19             System.out.println("第" + i + "个 MyThread: " + getName());
    20         }
    21         System.out.println("线程1的优先级:" + this.getPriority());
    22         MyThreadTwo myThreadTwo = new MyThreadTwo();
    23         myThreadTwo.start();
    24     }
    25 }

    2、线程二

     1 package com.cn.donleo.thread.priority;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-10-31 15:20
     6  * code
     7  */
     8 public class MyThreadTwo extends Thread {
     9     @Override
    10     public void run() {
    11         System.out.println("线程2的优先级:"+this.getPriority());
    12     }
    13 }

    3、线程三

     1 package com.cn.donleo.thread.priority;
     2 
     3 
     4 /**
     5  * @author liangd
     6  * date 2020-10-31 17:01
     7  * code
     8  */
     9 public class MyThreadThree extends Thread {
    10 
    11     MyThreadThree(String name) {
    12         super(name);
    13     }
    14 
    15     @Override
    16     public void run() {
    17         //获取系统当前时间
    18         Long start = System.currentTimeMillis();
    19         StringBuilder stringBuilder = new StringBuilder();
    20         //设置时间间隔
    21         MyThreadFour.getTime(stringBuilder);
    22         Long end = System.currentTimeMillis();
    23         System.out.println("线程3执行时间:" + (end - start));
    24     }
    25 }

    4、线程四

     1 package com.cn.donleo.thread.priority;
     2 
     3 import java.util.Random;
     4 
     5 /**
     6  * @author liangd
     7  * date 2020-10-31 17:17
     8  * code
     9  */
    10 public class MyThreadFour extends Thread{
    11 
    12     MyThreadFour(String name) {
    13         super(name);
    14     }
    15 
    16     @Override
    17     public void run() {
    18         Long start = System.currentTimeMillis();
    19         StringBuilder stringBuilder = new StringBuilder();
    20         getTime(stringBuilder);
    21         Long end = System.currentTimeMillis();
    22         System.out.println("线程4执行时间:" + (end - start));
    23     }
    24 
    25     /**
    26      * 设置时间间隔
    27      * @param stringBuilder
    28      */
    29     static void getTime(StringBuilder stringBuilder) {
    30         for (int i = 0; i < 20; i++) {
    31             for (int j = 0; j < 50000; j++) {
    32                 Random random = new Random();
    33                 random.nextInt();
    34                 stringBuilder.append(i);
    35             }
    36         }
    37     }
    38 }

    5、测试线程优先级

     1 package com.cn.donleo.thread.priority;
     2 
     3 /**
     4  * @author liangd
     5  * date 2020-10-31 16:49
     6  * code 线程优先级测试
     7  */
     8 public class TestPriority {
     9     /**
    10      * 一、优先级
    11      *  1、设置优先级 setPriority(8)
    12      *  2、得到优先级 getPriority()
    13      *  3、线程是有优先级的,也就是线程的执行顺序
    14      *     MAX_PRIORITY和MIN_PRIORITY分别是最高级10和最低级1,当然还有默认级别是5;
    15      *
    16      * 二、线程优先级特性
    17      *  1、线程优先级的继承特性:
    18      *     也就是如果线程A启动线程B,那么线程A和B的优先级是一样的
    19      *  2、线程优先级的规则性:
    20      *     即线程会优先级的大小顺序执行,但是不一定是优先级较大的先执行完
    21      *  3、线程优先级的随机特性
    22      *
    23      * @param args
    24      */
    25     public static void main(String[] args){
    26         System.out.println(Thread.currentThread().getPriority());
    27         //设置线程优先级,范围0-10,数值越大,优先执行的概率越大
    28         Thread.currentThread().setPriority(8);
    29         //线程2放在线程1方法里面执行,只需启动线程1
    30 //        MyThreadOne threadOne = new MyThreadOne("线程1");
    31         //设置线程3的优先级,执行速度概率应该比线程1和线程2更快
    32 //        threadOne.start();
    33 
    34 
    35         for (int i=0;i<5 ;i++){
    36             MyThreadThree threadThree = new MyThreadThree("线程3");
    37             threadThree.setPriority(1);
    38             threadThree.start();
    39             MyThreadFour threadFour = new MyThreadFour("线程4");
    40             threadFour.setPriority(10);
    41             threadFour.start();
    42         }
    43 
    44 
    45 
    46     }
    47 }
    作者:donleo123
    本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
  • 相关阅读:
    文件夹选项查看显示所有文件和文件夹..确定后隐藏文件依然不能显示,.
    加速电脑启动,给电脑瘦身
    进行性肌营养不良症的治疗
    可变量程的直流电压表
    数字图象处理课件 下载
    两顾高楼
    技巧心得:给拥有Google AdSense 帐户 朋友的一点忠告
    进行性肌营养不良研究又有新的发现
    电子通讯系统 >> BAS系统在地铁环境控制中的应用及实现
    J2ME游戏开发中时钟的简单实现
  • 原文地址:https://www.cnblogs.com/donleo123/p/14069904.html
Copyright © 2020-2023  润新知