查看线程的运行状态

线程共有6中状态:新建,运行(可运行),阻塞,等待,计时等待和终止。

当使用new操作符创建新线程时,线程处于“新建”状态。

当调用start()方法时,线程处于运行(可运行)状态。

当线程需要获得对象的内置锁,而该锁正被其他线程拥有,线程处于阻塞状态。

当线程等待其他线程通知调度表可以运行时,该线程处于等待状态。

对于一些含有时间参数的方法,如Thread类的sleep()方法,可以使线程处于计时等待状态。

当run()方法运行完毕或出现异常时,线程处于终止状态。

(1)编写类ThreadState,该类实现了Runnable接口。在该类中定义了3个方法:waitForASecond()方法用于当前线程暂时等待0.5秒,waitForYears()方法用于将当前线程永久等待,notifyNow()方法用于通知等待状态的线程运行。在run方法中,运行了waitForASecond()和waitForYears()。
public class ThreadState implements Runnable{

public synchronized void waitForASecond() throws InterruptedException{
    wait(500);        //使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法
}

public synchronized void waitForYears() throws InterruptedException{
    wait();            //使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法
}
public synchronized void notifyNow(){
    notify();


}
@Override
public void run() {

    try {
            waitForASecond();
            waitForYears();
    } catch (InterruptedException e) {

        e.printStackTrace();
    }

}

}
(2)编写类Test进行测试,在main()方法中,输出了线程的各种不同的状态。
public class TestThreadState {
public static void main(String[] args) throws InterruptedException {
ThreadState state = new ThreadState();
Thread thread = new Thread(state);
System.out.println(“新建线程:”+thread.getState());//输出线程状态
thread.start(); //调用thread对象的start(),启动新线程
System.out.println(“启动线程:”+thread.getState());//输出线程状态
Thread.sleep(100); //当前线程休眠0.1秒,使新线程运行waitForASecond()方法
System.out.println(“计时等待:”+thread.getState());//输出线程状态
Thread.sleep(1000); //当前线程休眠1秒,使新线程运行waitForYears()方法
System.out.println(“等待线程:”+thread.getState());//输出线程状态
state.notifyNow(); //调用state的notifyNow()方法
System.out.println(“唤醒线程:”+thread.getState());//输出线程状态
Thread.sleep(1000); //当前线程休眠1秒,使新线程结束
System.out.println(“终止线程:”+thread.getState());//输出线程状态
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值