您的位置:首页 > 其它

Thread.currentThread()、isAlive()、Thread.sleep()的使用

2016-10-27 22:22 260 查看
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线程再运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: