线程状态详解

什么是线程

    一个程序同时执行多个任务,每个任务称为一个线程,给人并发处理的感觉。

如果是单一线程,需要等待一个线程执行完毕后,才能执行下一个任务,如果一个类实现了Runnable接口类的run方法,并且使用Thread t =newThread(r);创建Tread对象

使用t.start();开启线程。就能完成简单的多线程应用,但是这个方法不建议使用,单独创建一个线程的代价太大,我们应该使用线程池

中断线程

  使用CurrentTread()返回当前执行线程,使用interrupt中断线程,线程状态将被设置为true,如果这个线程被sleep阻塞,那么就会抛出异常。

线程状态

线程有以下6中状态:

新创建(new)

  当用new操作符创建一个线程,如new Thread(r),该线程还没有开始运行那么这个线程的状态就是new。

可运行(Runnable)

  一旦调用start方法,线程处于runnable状态,一个可运行的线程可能正在运行也可能没有运行,这取决去操作其他给线程提供的运行时间。

被阻塞(Blocked)

   当一个线程处于被阻塞和等待状态,它不运行任何代码且消耗的资源最少,当一个线程视图获取一个内部对象锁,而该锁被其他对象持有,则该线程进入阻塞状态,当所有线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程变成非阻塞状态。

等待(Waiting)

  当线程等待另一个线程通知调度器一个条件时,这个线程进入等待状态

计时等待(timed Waiting)

  有几个方法有一个超时参数,调用它们导致线程进入计时等待状态,这一状态将保持到超时期满或者接收到适当的通知,带有超时参数方法有Tread.sleep和Object.wait、Tread.Jion

Lock.Trylock以及Condition.await的计时版。

中止(Terminated)

  线程因如下两个原因之一而被中止:

1. run方法正常退出而自然消亡。

2.因为一个没有捕获的异常终止了run方法而意外死亡。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理