线程可以有6中状态。
[1].New(新生)
[2].Runnable(可运行)
[3].Blocked(被阻塞)
[4].Waiting(等待)
[5].Timed Waiting(计时等待)
[6].Terminated(被终止)
1.新生(New)线程:
当使用new 操作符创建一个先的线程,但该线程还没有调用start()方法。线程这个时候的状态就是新生,这个时候我们可以做些初始化之类的工作。
2.可运行(Runnable)线程:
一旦调用了start()方法,这个线程就处于可运行(Runnable)状态。
为什么说是可运行Runnable状态,而不是运行状态?因为一个线程启动后,它可能正在运行,也可以还没有运行,而这个是取决于我们的操作系统给线程提供的运行的时间,一个线程一旦开始运行,它不必始终保持运行,事实上运行中的线程“中断”,目的是为了让其他的线程获得运行的机会,线程的调度细节依赖于操作系统提供的服务。
3.被阻塞的线程和等待线程
当线程处于被阻塞或者等待状态时,它暂时不活动,线程不会运行任何的代码而且消耗最少的资源,直到线程调度器重新激活他。细节取决于线程是怎么达到非活动状态的。
1).当一个线程试图获取一个内部的对象锁,而该锁被其他线程持有,则该线程进入阻塞状态。当所有其他线程释放该锁,并线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。
2).当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。
3).有几个方法有一个超时参数,调用它们导致进入计时等待状态。这个状态将一直保持到超时期满或者接到适当的通知。
4.被终止的线程
线程会因为2个原因之一而被终止。
1).run方法正常退出而自然死亡。
2).因一个没有捕获的异常而终止了run方法而意外死亡。
Java的多线程 --线程的状态,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/JFCao/p/3742667.html