线程基础方法

线程的6个状态

线程的状态由定义在Thread类内部的一个枚举Thread.State来表述,总共有6种状态,分别是NEW(新生)、RUNNABLE(可运行)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING(限时等待)、TERMINATED(停止)。
NEW
此时线程被创建,但还不可运行。
RUNNABLE
线程对象被调用了start()方法,此时线程调度器已通知操作系统将其安排到执行队列,等待CPU时间。
BLOCKED
执行过程中由阻塞I/O、竞争锁(等待获取锁)或者在条件变量上等待,使得线程处于此状态;这种状态的线程通常会被操作系统挂起(非可运行和非新生状态线程都有可能被挂起,被挂起的线程不拥有CPU时间)。
WAITING
可以调用wait()方法主动挂起线程后处于此状态,直到其他线程调用该对象的notify()或者notifyAll()方法后,才有可能退出此状态。
TIMED_WAITING
可以调用带标量时间参数的wait(long milliseconds)方法使当前线程处于此状态,其他与WAITING状态相同。
TERMINATED
当线程自然执行完成或者抛出异常后,将进入此状态,此时线程将永久不可执行。

线程相关基本方法

wait
使当前线程等待,使其进入对象的等待队列,当有时间参数时将会等待指定时间,调用对象此方法前当前线程当拥有对象锁,调用后将会释放对象锁。此后操作系统将会挂起当前线程,如果可执行线程数大于CPU数,当前线程可能会被交换出去。此方法可被中断。
notify/notifyAll
使相关联的WAITING和TIMED_WAITING状态下的线程回复可执行状态(即进入RUNNABLE状态),调用此方法前也必须拥有对象锁。
sleep
此方法是静态的,它使得当前线程进入TIMED_WAITING状态。此方法会抛出InterruptedException,如果当前线程在调用此方法前拥有某对象锁,它将不会释放锁,仅仅是让出CPU时间,让其他线程能获得CPU执行机会。
join
当A线程调用了B线程的join()方法后,A将进入等待状态,直到超时(针对带有参数的join方法)或者B线程执行完毕。其内部是使用wait()方法实现的。
yield
暗示线程调度器当前线程有意交出CPU使用权,让线程调度器执行其他线程,但是调度器可以忽略此请求。
interrupt
请求线程停止运行,当jdk中可抛出InterruptedException的方法正在执行时,调用此方法会使线程抛出此异常。当异常抛出后,线程会置其终端状态为真。如若捕获InterruptedException异常并不做处理的话,将不会有其他效果。
interrupted
此方法返回线程的中断状态,并置清除其中断标志,此后isInterrupted()返回false。
isInterrupted
此方法返回线程的中断状态。
isAlive
判断线程是否不处于NEW和TERMINATED状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stillearn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值