Java多线程(四)——线程状态

线程状态主要有六种

  • 创建
  • 就绪
  • 阻塞
  • 等待
  • 计时等待
  • 终止
    我们将会在后面慢慢介绍。
    获取当前的状态,你需要调用getState方法。

创建状态

当你使用new创建线程时,线程还没有运行,这就是创建状态,在他运行之前,你需要配置一些东西。

就绪状态

一旦你执行了start函数,线程就进入就绪状态,现在线程是可执行的。一个可执行的线程可能在执行,也可能没有执行。这决定于操作系统是否给线程时间执行。
当线程执行时,它不一定一直在执行,事实上,我们希望线程经常停止,给其他线程执行时间。线程执行的方式受操作系统的影响。当给定的时间运行完毕后,操作系统会运行其他线程。当判定当前应该执行哪个线程时,需要考虑线程的优先级。
现在所有桌面操作系统和服务器操作系统都使用抢占模式,但是一些智能设备使用合作调度。在这些情况下,线程还有在调用yield方法或者被阻塞和等待时被阻塞。
在多核处理器上,每个处理器可以运行一个线程,多个线程可以同步运行,当然,如果线程数多于核心数,那么还是会按照时间片分配。

阻塞和等待线程

当线程被阻塞和等待时,他们处于非活动状态,他们不运行任何代码,只占用最少的资源。需要经过线程调度唤醒他们。怎么唤醒依赖于非活动状态的到达方式。

  • 当线程尝试获取内部对象锁时(表示java.util.concurrent包中的Lock),而这个锁被其他线程占有时,这个线程被阻塞(blocked),当其他所有线程都没有占有这个锁,而且线程调度器允许这个线程执行时,这个线程退出阻塞状态。
  • 当线程等待其他线程提醒线程调度器安排其他线程时,它进入等待状态。我们在之后详细讨论。
  • 一些方法设有超时参数。调用他们会让这个线程进入计时等待状态。当超时或者接收到适当的提醒时,退出该状态。下图给出了状态转换过程,
  • 线程状态转移

结束的线程

线程结束的原因主要包括:

  • run方法运行结束,自然死亡。
  • 因为未处理的异常而结束。
    此外,你还可以使用stop方法结束线程。但是这个方法已经被废弃,你不应该使用它。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值