简单讲一下currentThread()方法的作用:
该方法可返回代码段正在被哪个线程调用的信息,这个方法在前面的几个内容里面也有出现,现在来讲讲它的一些使用。
以下来简单举个例子说明一下:
package test;
public class Run1 {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
}
}
如果看过前面博客的朋友肯定就知道,不用说,结果肯定是main
运行结果:
至于这个main和main()方法是不一样的,只是刚好同名而已,那么现在有一个比较专业一点的说法就是main方法被名为main的线程调用了。
下面我们继续再看一个案例:
package MyThread;
public class mythread extends Thread{
public mythread() {
System.out.println("构造方法的打印:"+Thread.currentThread().getName());
}
@Override
public void run() {
System.out.println("run方法打印:"+Thread.currentThread().getName());
}
}
package test;
import MyThread.mythread;
public class Run2 {
public static void main(String[] args) {
mythread my=new mythread();
my.start();
}
}
运行结果:
这样一来就很清楚了,mythread.java类的构造函数是被main线程调用的,而run方法是被名为Thread-0的线程调用的,虽然不知道这个东西是什么,这里可以不用管先,总之可以知道的是,run方法是自动调用的方法
现在我在Run2简单将那个my.start()改成my.run()
运行结果:
好像有点意思,再来一个比较复杂的情况让大家看看:
package MyThread;
public class CountOperate extends Thread{
public CountOperate() {
System.out.println("构造方法里——测试开始");
System.out.println("Thread.currentThread().getName="+Thread.currentThread().getName());
System.out.println("This.getName="+this.getName());
System.out.println("构造方法测试结束");
}
@Override
public void run() {
System.out.println("run方法里——测试开始");
System.out.println("Thread.currentThread().getName="+Thread.currentThread().getName());
System.out.println("This.getName="+this.getName());
System.out.println("run方法结束");
}
}
run方法里:
package test;
import MyThread.mythread;
import MyThread.CountOperate;
public class Run {
public static void main(String[] args) {
CountOperate c=new CountOperate();
Thread t1=new Thread(c);
t1.setName("A");
t1.start();
}
}
运行结果:
run()和start()的区别
thread.run():立即执行run方法,不启动新的线程
thread.start():执行run()方法时机不确定时,启动新的线程