首页 > 代码库 > Java的多线程 --线程的状态

Java的多线程 --线程的状态

线程可以有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方法而意外死亡。