线程的状态_java多线程,用Java实现线程状态

线程的状态

在Java中,要获取线程的当前状态,请使用Thread.getState()方法获取线程的当前状态Java提供了java.lang.Thread.State类,它定义了线程状态的ENUM常量,如下所示:常量类型:NEW声明:public static final thread . state NEW

描述:尚未启动的线程的线程状态

常量类型:runnable声明:public static final thread . state Runnable

描述:Runnable线程的线程状态可运行线程正在Java虚拟机中执行,但它可能正在等待来自操作系统的其他资源,如处理器。

常量类型:BLOCKED声明:public static final thread . state BLOCKED

描述:线程阻塞线程状态等待监视器锁定处于阻塞状态的线程正在等待监视器锁定以进入同步块/方法,或者在调用对象后重新进入同步块/方法。等待()

常量类型:WAITING声明:publicstatic最终线程。statewaiting

描述:等待线程的线程状态等待线程的线程状态由于调用以下方法之一,线程处于等待状态:

object .等待,无超时

thread .加入,无超时

locksupport . park

等待线程正在等待另一个线程执行特定操作。

常量类型:等待时间声明:publicstatic最终线程。state time _ wait

描述:具有指定等待时间的等待线程的线程状态由于在指定的等待时间内调用了以下方法之一,因此线程处于定时等待状态:

thread . sleep

object . wait with time out

thread . join with time out

locksupport . park nano

locksupport . park直到常量类型:终止声明:public static final thread . state Terminated

描述:终止线程的线程状态线程已完成执行。//演示线程状态的Java程序

类线程实现Runnable

{

public void run()

{

//将线程2移动到定时等待状态

try

{

Thread . sleep(1500);

}

catch(InterruptedException e)

{

e . PrintStackTrace();

}

try

{

thread . sleep(1500);

}

catch(InterruptedException e)

{

e . PrintStackTrace();

}

System . out . println(“线程1的状态,同时它调用线程2上的join()方法-“+

Test . thread 1 . GetState()”);

try

{

thread . sleep(200);

}

catch(InterruptedException e)

{

e . PrintStackTrace();

}

)

)

公共类测试实现Runnable

{

公共静态线程线程1;

公共静态测试对象;

公共静态void main(String[)参数)

{

0 b =新测试();

thread1 =新线程(obj);

//线程1已创建,当前处于新状态。

System.out.println(“线程1创建后的状态-”+thread 1 . GetState());

thread 1 . start();

//线程1移动到可运行状态

System.out.println(“调用后线程1的状态。start()方法-"+

thread 1 . GetState());

}

公共void run()

{

thread MyThread = new thread();

螺纹螺纹2 =新螺纹(螺纹);

//线程1已创建,当前处于新状态。

System.out.println(“线程2创建后的状态-”+thread 2 . GetState());

thread 2 . start();

//线程2移动到可运行状态

System.out.println(“调用后线程2的状态。start()方法-"+

thread 2 . GetState());

//将线程1移动到定时等待状态

try

{

//将线程2移动到定时等待状态

thread . sleep(200);

}

catch(InterruptedException e)

{

e . PrintStackTrace();

}

system . out . println(“调用后线程2的状态。方法-"+

thread 2 . GetState());

try

{

//等待thread2到die

thread 2 . join();

}

catch(InterruptedException e)

{

e . PrintStackTrace();

}

System . out . println(“线程2完成执行时的状态-”+

thread 2 . GetState());

}

}

输出:线程1创建后的状态-new

线程1调用后的状态。199线程2创建后的状态-NEW

线程2调用后的状态。调用后线程2的start()方法-RUNNABLE

状态。线程1的sleep()方法-TIMED _ WAIT

状态,同时调用线程2的join()方法-WAIT

状态线程2完成执行后-终止

描述:创建新线程时,线程处于新状态。当……在线程上调用start()方法时,线程调度器将其移至可运行状态每当在线程实例上调用join()方法时,执行该语句的当前线程将等待该线程移至终止状态因此,在控制台上打印最终语句之前,程序调用线程2上的join(),导致线程1等待线程2完成其执行并进入终止状态线程1进入等待状态,因为它等待线程2完成它的执行,因为它在线程2上使用连接。

大家都在看

相关专题