Java线程的状态
Java线程的状态大致可以分为6种,分别是New、Runnable、Blocked、Waiting、Timed_Waiting和Terminated。
1.New状态
New状态是指当用new关键字创建了一个线程对象时,该线程处于New状态。在这个状态中,操作系统中还没有创建任何线程履行体的履行线程。
示例:
publicclassNewDemo{publicstaticvoidmain(String[]args){Threadthread=newThread();thread.start();//线程的运行转到Runnable状态}}2.Runnable状态
Runnable状态是指线程已在JVM中创建,但是还没有运行。在这个状态中,操作系统中已为线程分配了必要的资源,比如CPU资源,但是线程还没有开始运行。当线程调用start()方法后,线程变成Runnable状态。
示例:
publicclassRunnableDemo{publicstaticvoidmain(String[]args){Threadthread=newThread(()->{//这里是线程运行的代码});thread.start();//线程的运行转到Runnable状态}}3.Blocked状态
Blocked状态是指线程被阻塞或挂起。在这个状态中,线程虽然有了足够的资源,但是却没法运行。可能的缘由是线程正在等待某个资源的释放,或正在等待某个条件的满足。
示例:
publicclassBlockedDemo{publicstaticvoidmain(String[]args){Objectlock=newObject();Threadthread=newThread(()->{synchronized(lock){//这里是线程需要等待的代码}});thread.start();//线程的运行转到Runnable状态//下面是其他代码逻辑synchronized(lock){lock.notifyAll();//释放锁}}}4.Waiting状态
Waiting状态是指线程等待其他线程的通知。在这个状态中,线程不会占用CPU资源,直到另外一个线程的通知才能继续运行。
示例:
publicclassWaitingDemo{publicstaticvoidmain(String[]args){Objectlock=newObject();Threadthread1=newThread(()->{synchronized(lock){try{lock.wait();//线程等待lock对象的通知}catch(InterruptedExceptione){e.printStackTrace();}}});Threadthread2=newThread(()->{//下面是其他代码逻辑synchronized(lock){lock.notifyAll();//发送通知给等待的线程}});thread1.start();thread2.start();}}5.Timed_Waiting状态
Timed_Waiting状态是指线程等待指定时长的时间,在这个状态中,线程也不会占用CPU资源,但是会在指定时长以后自动转换成Runnable状态。
示例:
publicclassTimedWaitingDemo{publicstaticvoidmain(String[]args){Threadthread=newThread(()->{try{Thread.sleep(1000);//线程等待1秒}catch(InterruptedExceptione){e.printStackTrace();}});thread.start();//线程的运行转到Runnable状态}}6.Terminated状态
Terminated状态是指线程已履行完了run()方法,进入了死亡状态。在这个状态中,线程占用的资源会被JVM释放。
示例:
publicclassTerminatedDemo{publicstaticvoidmain(String[]args){Threadthread=newThread(()->{//这里是线程运行的代码});thread.start();try{thread.join();//等待线程履行终了}catch(InterruptedExceptione){e.printStackTrace();}//线程已履行终了,进入Terminated状态}}桂>哥>网>络www.guIgege.cn
TOP