isAlive()方法使用

/ 多线程 / 没有评论 / 307浏览

isAlive()方法的作用是检测当前线程是否处于活动状态,也就是说线程是否还在执行中。我们通下面的代码来演示isAlive()的使用。

/**
* 消息生产者
*
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-13 16:31
* @since 1.0.0
*/
public class MessageServer implements Runnable {

private List<Object> messages = Collections.synchronizedList(new ArrayList<Object>());

@Override
public synchronized void run() {
messages.add(new Object());
System.out.println(String.format("消息服务中已有消息:%s 条 当前线程:%s", messages.size(), Thread.currentThread().getName()));
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 消息消费者
*
* @author Sama
* @author admin@jilinwula.com
* @date 2017-03-13 16:41
* @since 1.0.0
*/
public class MessageClient {
public static void main(String[] args) throws InterruptedException {
MessageServer messageServer = new MessageServer();
Thread thread = new Thread(messageServer);
thread.start();
for (int i = 10; i > 0; i--) {
System.out.println(String.format("倒计时:%s 线程状态: %s", i, thread.isAlive()));
Thread.sleep(1000);
}
}
}
消息服务中已有消息:1 条 当前线程:Thread-0
倒计时:10 线程状态: true
倒计时:9 线程状态: true
倒计时:8 线程状态: true
倒计时:7 线程状态: true
倒计时:6 线程状态: true
倒计时:5 线程状态: false
倒计时:4 线程状态: false
倒计时:3 线程状态: false
倒计时:2 线程状态: false
倒计时:1 线程状态: false

因为程序处理的速度很快不方便我们观察,所以我们在run()方法中让线程类暂停5秒,然后在主线程中循环调用isAlive()方法,因为线程暂停并不是线程结束,所以前5秒时线程状态均为true也就是活动状态,当循环到第6秒时,因为run()方法中的代码已经执行完了, 也就是当前线程已经结束了。所以后面5秒中输出的线程状态均为false.