Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
来源:互联网 发布:深度卸载mac上的软件 编辑:程序博客网 时间:2024/06/05 15:32
使用Thread.currentThread().getName()和使用this.getName()和对象实例.getName(),都可以得到线程的名称,但是使用this调用getName()方法只能在本类中,而不能在其他类中,更不能在Runnable接口中,所以只能使用Thread.currentThread().getName()获取线程的名称,否则会出现编译时异常。
Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
在继承 Thread的 run方法中使用this.XXX 和在外部 调用 对象.XXX或者 Thread.currentThread().getXXX,所得出的结果不是一样,如下面代码 为什么不一样
1.new一个自定义的线程,然后把这个线程对象丢给Thread对象构造方法,执行start 才会出现 上面的区别
2.如果是直接new一个自定义对象不交给 Thread线程执行调用 在其内部外部 使用 Thread.currentThread().getName() ,对象实例.getName() 和 this.getName(),这3个区别 都不存在,都是相同的,因为没有交给Thread执行,直接调用的当前实例本身
第一点代码
class DemoThread extends Thread{
public DemoThread(){
}
@Override
public void run() {
super.run();
System.out.println("内部 this.isAlive" + this.isAlive());
System.out.println("内部 Thread.currentThread().isAlive()"+Thread.currentThread().isAlive());
System.out.println("内部 this.getName" + this.getName());
System.out.println("内部 Thread.currentThread().getName()"+Thread.currentThread().getName());
}
}
public static void main(String[] args) throws InterruptedException {
DemoThread d = new DemoThread();
Thread t1 = new Thread(d);
t1.setName("213");
t1.start();
System.out.println("外部t1.isAlive()"+t1.isAlive());
System.out.println("外部t1.getName()"+t1.getName());
}
结果
外部t1.isAlive()true
外部t1.getName()213
内部 this.isAlivefalse
内部 Thread.currentThread().isAlive()true
内部 this.getNameThread-0
内部 Thread.currentThread().getName()213
如上面图所示 , 在 run方法中调用了 this.getXXX 和 Thread.currentThread().getXXX 完全是不同的结果,而 Thread.currentThread().getXXX 和外部对象t1.getXXX的结果是一致的
总结
首先要清楚t1和d是两个完全不同的对象,他俩之间唯一的关系就是把d传递给t1对象仅仅是为了让t1调用d对象的run方法, 在run方法中 调用this.getXXX 获取的是t1这个父类的状态,父类没有被重写所以跟实例掉的不同的,而在外部t1.getName和Thread.currentThread().getXXX拿到的是d这个子类的实例,所以结果相同,正常的话按道理对象继承父类this也应该实例的,set的话也是可以设置到父类中的,至于为什么线程中会出现这种结果,重点还是这句首先要清楚t1和d是两个完全不同的对象,他俩之间唯一的关系就是把d传递给t1对象仅仅是为了让t1调用d对象的run方法
综上所述 调用线程如果是Thread继承的方式 , 外部使用 Thread.currentThread().getXXX 或者 对象实例.getXXX() 内部则使用Thread.currentThread().getXXX 就不会出现获取不一致的问题
ps一点:
上面的线程实现方法 是new一个自定义的线程,然后把这个线程对象丢给Thread执行 才会出现 上面的区别,如果是直接new一个自定义对象不交给 Thread线程执行调用 在其内部外部 使用 Thread.currentThread().getName() ,对象实例.getName() 和 this.getName(),这3个区别 都不存在,都是相同的,因为没有交给Thread执行,直接调用的当前实例本身
转自:http://www.cnblogs.com/signheart/p/922dcf75dd5fe6b418d4475af89c4664.html
转自:http://www.cnblogs.com/signheart/p/922dcf75dd5fe6b418d4475af89c4664.html
0 0
- Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
- Thread.currentThread().getName() 和 this.getName()详解
- 多线程this.getName()和Thread.currentThread().getName()
- 并发this.getName()和Thread.currentThread().getName()区别
- Thread.currentThread().getName() 和 this.getName()区别详解
- currentThread().getName和this.getName()的区别
- Thread.currentThread().getName()与this.getName()的区别
- Thread.CurrentThread.getName 与 this.getName()
- 多线程中this.getName()和Thread.currentThread().getName()
- 多线程当中this.name和Thread.currentThread.getName的区别
- 【java】多线程中Thread.currentThread().getName()和this.getName()的区别
- Java多线程中this.getName()和Thread.currentThread.getName()的区别?
- JAVA 多线程 this.getName()与Thread.currentThread().getName()
- Thread.currentThread().getName()…
- Thread.currentThread().getName()
- 有关多线程中this.getName()和Thread.currentThread().getName()返回名字不一样的问题
- 多线程中this.getName()和Thread.currentThread().getName()返回名字不一样的问题
- 多线程的this.getName()与Thread.currentThread().getName为何有时不一样
- LeetCode Two Sum
- 教你实现GPUImage【OpenGL渲染原理】
- Spring常用注解
- 微信小程序开发手记之二:属性display
- 无法解析的外部符号
- Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
- CSDN 绑定手机号
- 面试经典动态规划,n个相同火柴分堆
- OSGi的作用
- LoadRunner常见问题
- Android获取短信验证码并自动填充的两种方式
- flask_mail的坑
- 友盟消息推送 3.x 的坑爹问题 s=-11,s1=accs bindapp error
- OracleSugar ORM框架的诞生,代码开源