A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 执迷不悟 于 2019-5-21 15:28 编辑

                               线程状态详解



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

如果是单一线程,需要等待一个线程执行完毕后,才能执行下一个任务,如果一个类实现了Runnable接口类的run方法,并且使用Thread t = new Thread(r);创建Tread对象
使用t.start();开启线程。就能完成简单的多线程应用,但是这个方法不建议使用,单独创建一个线程的代价太大,我们应该使用线程池

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

线程状态
线程有以下6中状态:

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

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

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


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

计时等待(timed Waiting)
  有几个方法有一个超时参数,调用它们导致线程进入计时等待状态,这一状态将保持到超时期满或者接收到适当的通知,带有超时参数方法有Tread.sleepObject.waitTread.Jion
Lock.Trylock以及Condition.await的计时版。

中止(Terminated)
  线程因如下两个原因之一而被中止:
1. run方法正常退出而自然消亡。
2. 因为一个没有捕获的异常终止了run方法而意外死亡。




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马