线程状态、线程打断

一、Java的6种线程状态

  new:线程创建,还未启动

  runnable:可运行状态,由线程调度器安排执行

      ready:就绪状态

      running:执行

  waiting:等待被唤醒,如自旋

  timed waiting:隔一段时间后自动唤醒

  blocked:被阻塞,只有synchronized才会到该状态

  terminated:线程结束

 

 二、线程打断

1、interrupt:打断某个线程,只是设置线程的标志位,并不是真正的打断线程。是不能中断正在竞争锁的线程

   isInterrupted:查询线程是否被打断

   static interrupted:查询当前线程是否被打断过,并重新设置标志位

2、如果想打断锁争抢过程用ReentrantLock,使用lockInterruptibly方法

sleep方法在睡眠的时候,不到时间是没办法叫醒的,这个是时候线程用interrupt设置标志位,然后catch到interruptedException来进行处理,决定继续睡或者其他逻辑

捕获到异常后java会自动进行标记位的复位

三、线程的结束

面试题:如何优雅的结束一个线程?

1、stop方法,但是该方法已被弃用

  因为使用stop方法会释放所有锁,加锁主要为了数据一致性问题,使用stop释放所有锁后,数据容易不一致

2、使用interrupt,捕获异常并且处理

 

posted @ 2022-03-06 16:15  showMeTheCodes  阅读(185)  评论(0)    收藏  举报