从头认识多线程-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
- 从头认识多线程-1.3 currentThread()
- 从头认识多线程-目录
- 从头认识多线程-目录
- 从头认识java-17.1 多线程
- 从头认识多线程-1.14 优先级
- 从头认识多线程-1.1 多线程的创建
- 从头认识多线程-1.4 isAlive()和Sleep()
- 从头认识多线程-1.5 interrupt()和isInterrupt()
- 从头认识多线程-1.17 守护线程setDaemon()
- 从头认识多线程-2.4 脏读(DirtyRead)
- 从头认识多线程-2.5 锁的可重入性
- 从头认识多线程-2.21 死锁简介
- 从头认识多线程-1.2 共享变量与线程安全简介
- 从头认识多线程-1.10 暂停与恢复线程
- 从头认识多线程-1.11 suspend和resume缺点-独占
- 从头认识多线程-1.12 suspend和resume缺点-不同步
- 从头认识多线程-1.15 优先级特性-继承性
- 从头认识多线程-1.16 对比不同的优先级
- lightoj 1122 - Digit Count(dp)
- python 的机器学习库
- UML中数据流图,用例图,类图,对象图,角色图,活动图,序列图详细讲述
- C++实验3—个人所得税计算器
- Problem R-1017
- 从头认识多线程-1.3 currentThread()
- UltraISO序列号,ESX 序列号,XMANAGER序列号,XSHELL序列号,OFFICE 2007序列号,TOAD序列号
- UITableView registerClass使用场景
- centos 6.5 源 epel解决方案
- BitmapFactory
- 当当分库分表中间件-sharding-jdbc
- js中(function(){…})()立即执行函数写法理解
- ArchLinux 启动等待1分半的问题
- android studio gradle 获取与更新