《Java多线程编程核心技术(第2版)》 —1.14.3 优先级的随机性

举报
华章计算机 发表于 2020/02/08 15:41:55 2020/02/08
【摘要】 本节书摘来自华章计算机《Java多线程编程核心技术(第2版)》 一书中第1章,第1.14.3节,作者是高洪岩。

1.14.3 优先级的随机性

前面案例介绍了线程具有优先级,优先级高的线程往往优先执行完,但这个结果不是绝对的,因为线程的优先级还具有“随机性”,即优先级较高的线程不一定每一次都先执行完。

创建名称为t20的项目,文件MyThread1.java代码如下:

package extthread;

 

import java.util.Random;

public class MyThread1 extends Thread {

    @Override

    public void run() {

        long beginTime = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {

            Random random = new Random();

            random.nextInt();

        }

        long endTime = System.currentTimeMillis();

        System.out.println("★★★★★thread 1 use time=" + (endTime - beginTime));

    }

}

文件MyThread2.java代码如下:

package extthread;

 

import java.util.Random;

 

public class MyThread2 extends Thread {

    @Override

    public void run() {

        long beginTime = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {

            Random random = new Random();

            random.nextInt();

        }

        long endTime = System.currentTimeMillis();

        System.out.println("☆☆☆☆☆thread 2 use time=" + (endTime - beginTime));

    }

}

文件Run.java代码如下:

package test;

 

import extthread.MyThread1;

import extthread.MyThread2;

 

public class Run {

    public static void main(String[] args) {

        for (int i = 0; i < 5; i++) {

            MyThread1 thread1 = new MyThread1();

            thread1.setPriority(5);

            thread1.start();

 

            MyThread2 thread2 = new MyThread2();

            thread2.setPriority(6);

            thread2.start();

        }

    }

}

为了让结果体现“随机性”,将两个线程的优先级分别设置为5、6,让优先级接近一些。

文件Run.java运行6次后的输出结果如图1-66所示。

 image.png

图1-66 交错执行完

根据此案例可以得出一个结论,优先级较高的线程并不一定每一次都先执行完run()方法中的任务,也就是线程优先级与输出顺序无关,这两者并没有依赖关系,它们具有不确定性、随机性。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。