文档章节

关于Thread.currentThread().getName和this.getName()的问题

zhanggong
 zhanggong
发布于 2015/09/12 16:07
字数 268
阅读 1021
收藏 3
package mythread;
public class CountOperate extends Thread{
    public CountOperate(){
        System.out.println("CountOperate---begin");
        System.out.println("Thread.currentThread().getName() = " + Thread.currentThread().getName() );
        System.out.println("this.getName() = " + this.getName() );
        System.out.println("CountOperate---end");
    }
    @Override
    public void run(){
        System.out.println("run---begin");
        System.out.println("Thread.currentThread().getName() = " + Thread.currentThread().getName() );
        System.out.println("this.getName() = " + this.getName() );
        System.out.println("run---end");
    }
}

package test;
import mythread.CountOperate;
public class Run{
    public static void main(String[] args){
        CounOperate c = new CountOperate();
        Thread ti = new Thread(c);
        t1.setName("A");
        t1.start();
    }
}

程序运行结果如下:

CountOperate---begin

Thread.currentThread().getName() = main

This.getName() = Thread-0

CountOperate---end

run---begin

Thread.currentThread().getName = A

this.getName = Thread-0

run---end

造成这样的结果的原因是:currentThread()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引用。

使用Thread.currentThread().getName()和使用this.getName(),都可以得到线程的名称,但是使用this调用getName()方法只能在本类中,而不能在其他类中,更不能在Runnable接口中,所以只能使用Thread.currentThread().getName()获取线程的名称,否则会出现编译时异常。

所以以后想过去线程的名称尽量使用Thread.currentThread().getName()。

© 著作权归作者所有

共有 人打赏支持
zhanggong
粉丝 5
博文 51
码字总数 26791
作品 0
深圳
程序员
私信 提问
Thread.currentThread()与this的区别

在自定义线程类时,如果线程类是继承java.lang.Thread的话,那么线程类就可以使用this关键字去调用继承自父类Thread的方法,this就是当前的对象。 另一方面,Thread.currentThread()可以获取...

狼王黄师傅
2018/11/10
0
0
理解currentThread

示例: 结果: ThreadName构造器 this.getName() =runthread Thread.currentThread().getName() =main ThreadName运行中 this.getName() =runthread Thread.currentThread().getName() =real......

Canaan_
2016/04/28
0
0
Java多线程编程核心技术(高洪岩)——阅读笔记

第一章 Java多线程技能 实现多线程的方式: 继承Thread类 实现Runnable接口 执行start()方法的顺序不代表线程启动的顺序 构造函数Thread(Runnable target)不光可以传入Runnable接口的对象,还...

问题达人
2016/12/04
49
0
Java多线程编程核心技术阅读笔记系列——第一章Java多线程技能

实现多线程的方式: 继承Thread类 实现Runnable接口 执行start()方法的顺序不代表线程启动的顺序 构造函数Thread(Runnable target)不光可以传入Runnable接口的对象,还可以传入一个Thread类的...

问题达人
2016/12/11
11
0
newFixedThreadPool()固定大小线程池详解,java线程池,java多线程代码示例

package com.dy.pool; import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; /** ExecutorService 真正的线程池接口。ScheduledExecutorService能和Timer/T......

洋哥6
2016/04/15
225
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7 安装maven

进入指定目录 cd /usr/local/src/ 下载maven 包 # 打开这个地址选中自己需要的版本补齐后面的地址,再复制到SSH去执行wget http://mirrors.hust.edu.cn/apache/maven/maven-3/ 解压改名 ...

Elson
43分钟前
4
0
推荐一个开源数据库迁移神器SQLines

SQLines 是一个开源(Apache License 2.0)可伸缩,并发高性能数据传输和schema 转换工具,你可以用作数据库迁移以及ETL过程 支持的数据库: Oracle and Oracle Exadata Microsoft SQL Server...

Benz001
45分钟前
12
0
面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题

今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一、缓存雪崩 1.1什么是缓存雪崩? 回顾一下我们为什么要用缓存(Re...

我最喜欢三大框架
46分钟前
4
0
composer 很慢怎么办?

关于 Composer 的详细安装使用,详见之前的文章:在 PHP 中安装、使用 Composer 包管理工具 Composer 在国内不管是更新还是安装等都有一个「慢」的问题,有的时候真的很煎熬。 因此我们一般会...

whoru
59分钟前
2
0
ffmpeg提取音频文件

问题 从特定的mp3音频文件中,提取一部分作为新的mp3文件 ffmpeg ffmpeg -i a.mp3 -ss 00:25:00 -to 00:28:20 -acodec copy b.mp3 -i输入的文件 -ss从指定时间点开始提取 -to到指定时间点结...

亚林瓜子
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部