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线程再运行。
一个简单的例子:
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线程再运行。
相关文章推荐
- 《多线程编程》学习之二:Thread.currentThread()、isAlive()、Thread.sleep()的使用
- 玩转java多线程学习篇四 Thread类的常用API之currentThread,isAlive,sleep,interrupt,isInterrupted,stop
- 多线程基础二、currentThread()、isAlive()、sleep()、getId()
- 从头认识多线程-1.4 isAlive()和Sleep()
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 关于Thread.IsAlive属性
- netty中使用Thread.sleep()方法的问题
- java Thread编程(二)sleep的使用
- java中Thread.sleep()函数使用
- 线程理解之经典,同时测试了isAlive的使用。
- AsyncTask 不能与Thread.sleep()同时使用解决方案
- runnable与handler结合使用,其实跟在Thread中的run()中sleep的效果是一样的
- Thread.Sleep vs. Thread.CurrentThread.Join
- Java中的Object的Wait() 和notify()方法使用时应注意的地方和Thread中的sleep()方法
- Hibernate4中使用getCurrentSession报Could not obtain transaction-synchronized Session for current thread
- Java中Thread.sleep()和Thread.currentThread.sleep()的区别
- Thread类的简单使用(Start,Sleep,Join,传参)
- Thread.sleep 和Object.join的使用
- Thread的Thread.IsAlive属性
- Java知多少(60)isAlive()和join()的使用