《Java多线程编程核心技术(第2版)》 —1.2.3 线程随机性的展现

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

1.2.3 线程随机性的展现

前面介绍过线程的调用是随机的,但这一点并没有在代码中得以体现,都是理论的内容,所以本节将在名称为randomThread的Java项目中演示线程的随机性。

创建自定义线程类MyThread.java的代码如下:

package mythread;

 

public class MyThread extends Thread {

    @Override

    public void run() {

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

            System.out.println("run=" + Thread.currentThread().getName());

        }

    }

}

再创建运行类Test.java代码:

package test;

 

import mythread.MyThread;

 

public class Test {

    public static void main(String[] args) {

        MyThread thread = new MyThread();

        thread.setName("myThread");

        thread.start();

 

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

            System.out.println("main=" + Thread.currentThread().getName());

        }

    }

}

Thread.java类中的start()方法通知“线程规划器”—此线程已经准备就绪,准备调用线程对象的run()方法。这个过程其实就是让系统安排一个时间来调用Thread中的run()方法,即让线程执行具体的任务,具有随机顺序执行的效果。

如果调用代码“thread.run();”而不是“thread.start();”,其实就不是异步执行了,而是同步执行,那么此线程对象并不交给“线程规划器”来进行处理,而是由main主线程来调用run()方法,也就是必须等run()方法中的代码执行完毕后才可以执行后面的代码。

以异步方式运行的效果如图1-13所示。

image.png

多线程随机输出的原因是CPU将时间片分给不同的线程,线程获得时间片后就执行任务,所以这些线程在交替地执行并输出,导致输出结果呈现乱序的效果。时间片即CPU分配给各个程序的时间。每个线程被分配一个时间片,在当前的时间片内CPU去执行线程中的任务。需要注意的是,CPU在不同的线程上进行切换是需要耗时的,所以并不是创建的线程越多,软件运行效率就越高,相反,线程数过多反而会降低软件的执行效率。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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