从头认识多线程-1.3 currentThread()

来源:互联网 发布:mac的pages如何保存 编辑:程序博客网 时间:2024/04/28 00:10

这一章节我们来讨论一下currentThread()。

我们下面通过一段代码来解释几个问题:

package com.ray.deepintothread.ch01.topic_3;public class CurrentThreadSample {public static void main(String[] args) {ThreadFive threadFive = new ThreadFive();Thread thread = new Thread(threadFive, "myThread");// 设置运行线程的名称threadFive.setName("threadFive");// 设置实例的名称threadFive.myTest();thread.start();}}class ThreadFive extends Thread {public void myTest() {show();}private void show() {System.out.println("----------begin----------");// 这里指的是执行这个线程的名称System.out.println("Thread name:" + Thread.currentThread().getName());System.out.println(this);// this.getName指的是这个实例的名称// 由于是继承Thread,Thread本身可以设置名称System.out.println("Instance name:" + this.getName());System.out.println("----------end----------");}@Overridepublic void run() {super.run();show();}}

输出:

----------begin----------
Thread name:main
Thread[threadFive,5,main]
Instance name:threadFive
----------end----------
----------begin----------
Thread name:myThread
Thread[threadFive,5,main]
Instance name:threadFive
----------end----------


1.currentThread()的作用

作用就是得到当前线程的对象。

如上面的代码,通过currentThread()我们可以轻易的就得到当前线程的名称,我们还可以通过线程对象,得到其他的属性。


2.currentThread()和this

上面的注释也写清楚了。

一开始我也混淆了,因为ThreadFive是继承Thread,想当然的把this想成是当前线程,但其实是当前实例,因此两者虽然都是getName,但是得到的是不同的结果


3.ThreadFive是任务,而不是线程

我们必须要清楚的理清new ThreadFive()和new Thread(threadFive),这两者是有根本性的区别。

new ThreadFive()是创建一个任务实例,而不是具体线程

new Thread(threadFive)是把threadFive这个任务实例放到thread这个线程里面执行


4.搞懂了第三个问题,我把上面的代码改成更加混淆,大家也不怕了

一开始我对两个setName都混淆在一起的。

package com.ray.deepintothread.ch01.topic_3;public class CurrentThreadSample {public static void main(String[] args) {ThreadFive threadFive = new ThreadFive();Thread thread = new Thread(threadFive);thread.setName("myThread");// 设置运行线程的名称threadFive.setName("threadFive");// 设置实例的名称threadFive.myTest();thread.start();}}class ThreadFive extends Thread {public void myTest() {show();}private void show() {System.out.println("----------begin----------");// 这里指的是执行这个线程的名称System.out.println("Thread name:" + Thread.currentThread().getName());System.out.println(this);// this.getName指的是这个实例的名称// 由于是继承Thread,Thread本身可以设置名称System.out.println("Instance name:" + this.getName());System.out.println("----------end----------");}@Overridepublic void run() {super.run();show();}}

总结:简单介绍了currentThread()的用法,再通过currentThread()的使用来说明任务实例与线程之间的关系。


我的github:https://github.com/raylee2015/DeepIntoThread

0 0
原创粉丝点击