1、Thread.currentThread()方法: 返回当前正在运行的线程
一个简单的例子:
MyThread_7.Java类的构造函数是被main线程调用的,而run()方法是被名为Thread-0的线程调用的。注意这里使用thread.start(),而不是thread.run(),前者run()方法是自动调用的,后者并没有另起一个线程,而是直接调用MyThread_7类的run()方法。
2、isAlive()方法:判断当前线程是否处于活动状态
“活动状态”是指线程处于运行或者准备开始运行的状态。下面通过两个例子说明this与Thread.currentThread()的差异。
(1)例子一:
分析:Thread.currentThread()返回的是当前运行的线程,而this是指当前对象。本例中,MyThread_8.java的构造方法是被main线程调用的,run()方法是被线程Thread-0调用的,而this是指MyThread_8类的实例,是线程Thread-0。因此在调用构造方法时,Thread.currentThread().getName()返回的是main,this.getName()返回的是Thread-0,而由于当前运行的线程是main,而不是this对应的Thread-0线程,故this.isAlive()返回false。在调用run()方法时的分析可以类比。
(2)例子二:将线程对象以构造参数的方式传递给Thread对象,将run()方法交由其它线程来调用
分析:与上一个例子对比,发现run()的输出不同。本例中,this(对应Thread-0)的run方法是交由线程Thread-run执行的,而不是由自己执行。所以在run()方法执行时,Thread.currentThread().getName()返回的是Thread-run,this.isAlive()返回的是false。
要分清楚Thread.currentThread()与this的区别。
3、Thread.sleep():使“正在执行的线程”休眠指定的毫秒数。
这个“正在执行的程序”是指this.currentThread()返回的线程。
在run()方法中调用Thread.sleep(2000)方法,会使正在运行的线程(Thread-0)休眠2000毫秒,是run()输出的begin time与end time之差。由本例还可见,mian线程与Thread-0线程是异步执行的,main线程运行完后,Thread-0线程再运行。