Thread.currentThread()与this的区别

Thread.currentThread()与this的区别:

1.Thread.currentThread().getName()方法返回的是对当前正在执行的线程对象的引用,this代表的是当前调用它所在函数所属的对象的引用。

2.使用范围:

Thread.currentThread().getName()在两种实现线程的方式中都可以用。
   this.getName()只能在继承方式中使用。因为在Thread子类中用this,this代表的是线程对象。
   如果你在Runnable实现类中用this.getName(),那么编译错误,因为在Runnable中,不存在getName方法。

demo1:

public class MyThread extends Thread{
 @Override
 public void run(){
  System.out.println("run currentThread.isAlive()=" + Thread.currentThread().isAlive());
  System.out.println("run this.isAlive()=" + this.isAlive());
  System.out.println("run currentThread.getName()=" + Thread.currentThread().getName());
  System.out.println("run this.getName()=" + this.getName());
 }
}

运行Run.java如下:
public class Run {
 public static void main(String[] args) {
  MyThread mythread = new MyThread();
  mythread.setName("A");
  System.out.println("begin main==" + Thread.currentThread().isAlive());
  System.out.println("begin==" + mythread.isAlive());
  mythread.start();
  System.out.println("end==" + mythread.isAlive());
 }
}

运行结果:
begin main==true
begin==false
end==true
run currentThread.isAlive()=true
run this.isAlive()=true
run currentThread.getName()=A
run this.getName()=A

demo2:

public class MyThread extends Thread{
 @Override
 public void run(){
  System.out.println("run currentThread.isAlive()=" + Thread.currentThread().isAlive());
  System.out.println("run this.isAlive()=" + this.isAlive());
  System.out.println("run currentThread.getName()=" + Thread.currentThread().getName());
  System.out.println("run this.getName()=" + this.getName());
 }
}

运行Run.java如下:
public class Run {
 public static void main(String[] args) {
  MyThread mythread = new MyThread();
  Thread t1 = new Thread(mythread);
  t1.setName("A");
  System.out.println("begin main==" + Thread.currentThread().isAlive());
  System.out.println("begin==" + mythread.isAlive());
  t1.start();
  System.out.println("end==" + mythread.isAlive());
 }
}

运行结果:
begin main==true
begin==false
end==false
run currentThread.isAlive()=true
run this.isAlive()=false
run currentThread.getName()=A
run this.getName()=Thread-0
时间: 2024-10-23 11:27:03

Thread.currentThread()与this的区别的相关文章

关于 Thread.currentThread()

currentThread()  到底是什么? 其实currentThread() 只是Thread 的一个静态方法.返回的正是执行当前代码指令的线程引用: /** * Returns a reference to the currently executing thread object. * * @return the currently executing thread. */ public static native Thread currentThread(); 换句话说, Threa

Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别

查了一些资料也不是太明白两个的区别,但是前者是最安全的用法 打个简单的比方,你一个WEB程序,发布到Tomcat里面运行.首先是执行Tomcat org.apache.catalina.startup.Bootstrap类,这时候的类加载器是ClassLoader.getSystemClassLoader().而我们后面的WEB程序,里面的jar.resources都是由Tomcat内部来加载的,所以你在代码中动态加载jar.资源文件的时候,首先应该是使用Thread.currentThread

Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别

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

Thread.currentThread().getName() 和 this.getName()区别详解

Thread.currentThread().getName() 和 this.getName()区别详解 <<Java多线程编程核心技术>> 这本书里说到了这个:  Thread.currentThread().getName() this.getName() 他俩是有区别的,得到的效应是不一样的,首先,从直观上来说: Thread.currentThread().getName() 是一个静态方法 this.getName()是一个实例方法 实例方法,一般情况下是:反映这个实例

Java多线程之this与Thread.currentThread()的区别

package mythread; public class CountOperate extends Thread{ public CountOperate(){ System.out.println("CountOperate---begin"); System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName());//获取线程名 System.ou

Class.forName() 初始化、Thread.currentThread().getContextClassLoader().getResourceAsStream

Class.forName() 和 ClassLoader.loadClass()的区别? Class.forName() 和 Class.forName().NewInstance()的区别? Class.forName("xx.xx")等同于Class.forName("xx.xx",true,CALLClass.class.getClassLoader()),第二个参数(bool)表示装载类的时候是否初始化该类,即调用类的静态块的语句及初始化静态成员变量. C

ClassLoader,Thread.currentThread().setContextClassLoader,tomcat的ClassLoader

实际上,在Java应用中所有程序都运行在线程里,如果在程序中没有手工设置过ClassLoader,对于一般的java类如下两种方法获得的ClassLoader通常都是同一个 this.getClass.getClassLoader(): Thread.currentThread().getContextClassLoader(): 方法一得到的Classloader是静态的,表明类的载入者是谁: 方法二得到的Classloader是动态的,谁执行(某个线程),就是那个执行者的Classloade

关于Thread.currentThread()和this的差异

重新来看多线程时,被这结果搞懵逼了.不多说,直接上代码: 1 public class MyThread02 extends Thread { 2 public MyThread02() { 3 System.out.println("init curr: " + Thread.currentThread().getName()); 4 System.out.println("init this: "+this.getName()); 5 } 6 @Override

java 继承Thread和实现Runnable的区别

1.class MyThread extends Thread{ private int a; public void run(){ for( ; a < 100; a++  ){ System.out.println(getName() + " " + a); } } public static void main(String [ ] args){ MyThread  one = new MyThread(); MyThread  two =  new MyThread();