博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三、java多线程核心技术(笔记)——线程的优先级
阅读量:5238 次
发布时间:2019-06-14

本文共 2656 字,大约阅读时间需要 8 分钟。

   概论: 在操作系统中,线程可以划分优先级,优先级高的获得的CPU资源较多,也就是CPU优先执行优先级较高的线程。在JAVA中线程的优先级

分1~~10个10个等级。大于或者小于会报异常。

 

 

一、线程优先级具有继承性

    A 线程启动 B线程,则线程B的优先级与A的是一样的。。

   

public class MyThread1 extends Thread {    @Override    public void run() {        System.out.println("MyThread1 run priority=" + this.getPriority());        MyThread2 thread2 = new MyThread2();        thread2.start();    }}
public class MyThread2 extends Thread {    @Override    public void run() {        System.out.println("MyThread2 run priority=" + this.getPriority());    }}
public class Run {    public static void main(String[] args) {        System.out.println("main thread begin priority="                + Thread.currentThread().getPriority());  \\获取线程的优先级        //Thread.currentThread().setPriority(6);           \\设置线程的优先级        System.out.println("main thread end   priority="                + Thread.currentThread().getPriority());        MyThread1 thread1 = new MyThread1();        thread1.start();    }}

结果:

二、线程优先级具规则性

public class MyThread1 extends Thread {    @Override    public void run() {        long beginTime = System.currentTimeMillis();        long addResult = 0;        for (int j = 0; j < 10; j++) {            for (int i = 0; i < 50000; i++) {                Random random = new Random();                random.nextInt();                addResult = addResult + i;            }        }        long endTime = System.currentTimeMillis();        System.out.println("★★★★★thread 1 use time=" + (endTime - beginTime));    }}
public class MyThread2 extends Thread {    @Override    public void run() {        long beginTime = System.currentTimeMillis();        long addResult = 0;        for (int j = 0; j < 10; j++) {            for (int i = 0; i < 50000; i++) {                Random random = new Random();                random.nextInt();                addResult = addResult + i;            }        }        long endTime = System.currentTimeMillis();        System.out.println("☆☆☆☆☆thread 2 use time=" + (endTime - beginTime));    }}

 

public class Run {    public static void main(String[] args) {        for (int i = 0; i < 5; i++) {            MyThread1 thread1 = new MyThread1();            thread1.setPriority(1);            thread1.start();            MyThread2 thread2 = new MyThread2();            thread2.setPriority(10);            thread2.start();        }    }}

结果:高优先级的线程总是大部分先执行完,运行速度比较快,并不代表全部执行完,线程的优先级与线程的执行顺序无关。出现这样的结果优先级相差10倍造成的。修改为相近的优先级再看看,如下图。

三、线程优先级具具有随机性

  多次运行优先级相近的代码,你会发现会有如下结果出现。。可以证实线程的优先级具有随机性。

 

 守护线程(daemon)

   概念:任何一个守护线程都是整个JVM中所有非守护线程的“保姆”。。只要当前实例中存在一个非守护线程没有结束,守护线程就在工作。当最后一个非守护线程结束

时,守护线程才会结束工作。(典型,GC垃圾回收器)

 

        

转载于:https://www.cnblogs.com/aGboke/p/6517312.html

你可能感兴趣的文章
Maven配置教程
查看>>
paramiko 模块安装
查看>>
mongodb基础知识
查看>>
斜率优化&单调性优化的相似性
查看>>
IP和整型间相互转换
查看>>
(转)iOS多线程
查看>>
xcode编译配置集合
查看>>
djangoORM操作
查看>>
最高的奖励 - 优先队列&贪心 / 并查集
查看>>
STL顺序容器总结
查看>>
adb常用命令
查看>>
网络分层
查看>>
用Spring构建一个RESTful Web Service
查看>>
Mathematica Memo 01
查看>>
第三章 2D Rendering Input Layout
查看>>
【python】读取和输出到txt
查看>>
SCIM不能输入中文
查看>>
[Codeforces 961G]Partitions
查看>>
[CODEVS 1288]埃及分数
查看>>
经典排序算法——快速排序
查看>>