`
加菲学Java
  • 浏览: 131199 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

Thread : currentThread().getName()和getName()的区别

 
阅读更多

如下的code:


public class Thread_getName2 extends Thread {
	public void run() {
		//System.out.println(getName());
		System.out.println(currentThread().getName());
	}

	public static void main(String[] args) {
		Thread_getName2 t = new Thread_getName2(); 
		t.start(); 
		t.run();   
       }
}


  如果调用this.getName(),打印结果如下:


 t.start(); // Thread-0
 t.run();   // Thread-0


 调用currentThread().getName(),打印结果如下:


 t.start(); // Thread-0
 t.run();   // main


 以上哪种结果才是正确的呢?

 应该是第二种currentThread().getName()

 首先可以理解t.run()方法应该是由主线程调用的,而直接调用getName()时却打印出了Thread-0,这是不正确的。

 

那为什么getName()会产生这样的结果呢?

首先Thread_getName2 t = new Thread_getName2();

这个时候如果打印下t,会发现t的值为: Thread[Thread-0,5,main],这个可以看Thread类的toString()方法,


 

ThreadGroup group = getThreadGroup(); 
// java.lang.ThreadGroup[name=main,maxpri=10]

if (group != null) {
    return "Thread[" + getName() + "," + getPriority() + "," + 
               group.getName() + "]";
} 
		   
		

 

 

而以下两种方式是一样的

 

System.out.println(getName());
System.out.println(this.getName());

 

而this就是当前的t,所以t.run()也会打印出Thread-0。


通过以上的比较,如果要得到准确的线程的名称,必须要先调用currentThread()得到当前是哪个线程,而后调用getName()才能得出正确的结果。

如果单单只是调用getName()则会产生错误的结果。






 

分享到:
评论

相关推荐

    currentThread.getName.rar_单片机开发_Java_

    通过继承 Thread 类并使用 currentThread.getName() 方法来监测线程的状态

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    System.out.println("Activity-->"+ Thread.currentThread().getName()); } Runnable r = new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { Thread...

    日志打印工具-资源分必选-到博客中复制代码

    StackTraceElement[] sts = Thread.currentThread().getStackTrace(); if (sts == null) { return null; } for (StackTraceElement st : sts) { if (st.isNativeMethod()) { continue; } if (st....

    java笔试题大汇总

    System.out.println(Thread.currentThread().getName()+"-inc:"+j); } private synchronized void dec(){ j--; System.out.println(Thread.currentThread().getName()+"-dec:"+j); } class Inc implements ...

    java笔试汇总 经典中的经典!绝对超值!还等什么 下载评分吧!!!

    System.out.println(Thread.currentThread().getName()+"-inc:"+j); } private synchronized void dec(){ j--; System.out.println(Thread.currentThread().getName()+"-dec:"+j); } class Inc ...

    多线程火车售票

    System.out.println(Thread.currentThread().getName()+"线程出售的是第"+ num-- +"张火车票!"); } } public static void main(String[] args) { SaleTickets s = new SaleTickets(); //:窗口...

    threadpool-example

    System.out.println(“ Jon:” + jobNumber +“正在被线程处理:” + Thread.currentThread()。 getName()); 尝试{Thread.sleep((int)(1000)); } catch(InterruptedException e){} System.out....

    Python 多线程其他属性以及继承Thread类详解

    1.threading.currentThread:返回当前线程变量 2.threading.enumerate:返回一个包含正在运行的线程的list,正在运行的线程指的是线程启动后,结束前的状态 3.threading.activeCount:返回正在运行的线程数量,效果跟...

    ActiveMQ_Demo

    TextMessage msg = session.createTextMessage(Thread.currentThread().getName()+ "productor:我是大帅哥,我现在正在生产东西!,count:"+num); System.out.println(Thread.currentThread().getName()+ ...

    Android定时器实现的几种方式整理及removeCallbacks失效问题解决

    Runnable runnable = new Runnable() { @Override public void run() { //你要做的事 //…… System.out.println(Thread.currentThread().getName()); handler.postDelayed(runnable, 1000); } }; 然后调用handler....

    rx-process:JavaScala中的React式(非阻塞)流程API

    接收过程 使用和Java / Scala中的React式(非阻塞) Process API。 设置和限制 rx-process继承了... def onNext ( t : String ) = println( s " ### onNext: ' ${t} ' on ${ Thread .currentThread().getName()}

    Java中的Lambda表达式

    Lambda表达式 1.1 思想 “说重点” 匿名内部类方式来作为线程池执行目标代码  1. 这个方法需要的参数是Runnable接口的实现类对象 ...() -> System.out.println(Thread.currentThread().getName())  La

    火车售票系统

    while(((Thread.currentThread()).getName()).equals("clock")) { now = Calendar.getInstance(); nowTime = now.getTime().getTime(); } while(((Thread.currentThread()).getName()).equals("ti")) while...

    ym_java-YOYOPlayer-src

    private static Logger log = Logger.getLogger(BasicPlayer.class.getName()); /** * These variables are used to distinguish stopped, paused, playing states. * We need them to control Thread. */ // ...

    射击游戏 android

    Log.d("waj", "i:"+i+Thread.currentThread().getName()+" "+GameView.this.toString()); int a = (int)Math.ceil(Tools.sharedTools(GameView.this.context).getSetting(GameView.this.level)....

    Java基础巩固之线程学习

    一、线程的学习  线程是程序中执行单个任务的顺序的流程。  线程创建的两种方式: ... System.out.println(Thread.currentThread().getName()); } } }; thread.start(); }  2、实现Runnable接口的

    ThreadLocal跨线程问题

    1、问题 通常复杂的处理流程中,我们会使用一些异步处理的手段,那么这种场景下ThreadLocal即可能出现获取失败的问题。... System.out.println(Thread.currentThread().getName()+"-getThreadLocal:

    Java-如何解决多线程当中共享资源的冲突问题

    解决多线程当中共享资源冲突的问题 1. 冲突问题展示: /* * 共享资源冲突的问题 */ class SingleThread ... System.out.println(Thread.currentThread().getName() + "售出了第" + ticket + "张票");

    Lamdba表达式使用

    System.out.println(Thread.currentThread().getName()); } }); /* 匿名内部类方式来作为线程池执行目标代码 1. 这个方法需要的参数是Runnable接口的实现类对象 2. Runnable接口目标是为了提供一个run 方法, ...

Global site tag (gtag.js) - Google Analytics