JAVA-初步认识-第十二章-Thread类中的方法线程名称
Posted 照破山河万朵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA-初步认识-第十二章-Thread类中的方法线程名称相关的知识,希望对你有一定的参考价值。
一.
不同的运行,导致over的位置发生了变化。为什么呢?我们这里至少有三个线程。三个线程之间来回随机切换。
接下来我们想知道的问题就是,我们开启了多个线程,怎么区分现在正在运行的线程是谁?多个线程随机切换,我们怎么区分。
区分的方法到哪儿找?到thread类中去寻找。线程怎么区分,线程自己最清楚。
Thread构造函数里面有一个name,线程有名字。
还有getName获取名字。现在,我们就来获取线程的名字(通过名字来区分线程)。(在上面的例子中,我们没有对线程进行构造函数初始化,直接获取名字会是什么样的呢?)
d1和d2两个线程在哪儿执行的呢?应该都在run方法里执行,
在run方法执行的时候,输出语句中添加了获取名称的语句。(Demo是thread的子类,它也就具备父类的方法,来个getName是可以的)
运行之后,确实出现了名称。名称就是thread- 加上编号,从0开始编,这个就是线程的名字(说成默认的线程名字比较好),你要是开启多个的话,就从0开始一直往后遍。(这里DOS中显示的被编号的线程是自己创建的线程吧?)
这个编号的出现可能是谁先调用了getName方法,就现在这里出现编号,按照调用的顺序来的。
现在修改程序,将start方法又改回了run方法,
(我觉着这个run的还是主线程操控的,不会有编号的出现。)
d1是主线程执行的,而且d1调用的run方法,也是主线程来执行的,就看主线程在执行run中getName方法时,输出的线程编码是什么?
编译运行的结果如下:
结果显示d1的仍旧是thread-0,但由于是主线程执行的,导致旺财输出是全面而又严谨的。(为什么是thread-0,而不是main?主线程调用run方法,输出了d1线程的名称,不是输出自己的名称)
现在将两个对象d1和d2全部改为run方法,
这回编码依旧没变,但是全部的代码都是主线程执行的,顺序很严谨。
给大家解释一下,当我们创建两个线程子类对象的时候,它们在创建的同时已经完成了名称的定义。
每一个thread子类对象在创建的当时,就已经有了名称了。但是,我们现在想要知道的是,正在运行的线程的名称是什么?
对于下图的程序,由于子类对象调用的是run方法,所以自己创建的两个线程并没有开启,都是主线程在运行。现在想知道主线程的名字。
怎么获取当前运行线程的名字呢?(为什么要纠结线程的名字呢?仅仅是为了区分多个线程么?)
继承体系中的getName是获取对象的名字。→不对,获取的是自己创建线程的名称。对象的名称是构造初始化,传递实参得来的。
想要获取运行时线程名称,必须先要得到运行时线程对象(这里的线程对象和继承thread子类对象是不一样的),
在线程类方法当中有一个方法,叫做currentThread(),返回thread类型,静态的,类名可以直接调用。
接着对原先的程序进行修改,如下图所示
Thread.currentThread().getName(),这样写语法是可以理解的,唯一让我疑惑的是,为什么是类名调用时,采用的Thread类,而不是Demo类?
当然编译的结果显示,线程名称就是main
再次修改程序,
DOS结果显示为三种线程的名称。
接着提高获取线程名称方法的可读性,复写该方法。
(这里在构造函数中输入实参,怎么就改变了获取线程名方法的内容呢?)
在run方法的输出中是由name的,也有getName方法?
DOS的结果中,null和线程名称xiaoqiang,旺财怎么来的?这个流程不是很清楚。
以上是关于JAVA-初步认识-第十二章-Thread类中的方法线程名称的主要内容,如果未能解决你的问题,请参考以下文章