线程初级

56 阅读1分钟

线程的状态

  1. new :线程刚创建,还没有启动
  2. Runnable:可运行状态,有线程调度器可以安排执行
  3. waiting:等待被唤醒
  4. Time Waiting:隔一段时间后自动唤醒
  5. blocked:被阻塞,正在等待锁
  6. terminated:线程结束 image.png

线程打断

interrupt

打断某个线程(设置标志位)

实例方法interrupt()仅仅是设置线程的中断状态为true,发起一个协商而不会立刻停止线程。

如果线程阻塞的调用wait(),wait(long),或wait(long,int)的方法Object类,或join(),jion(long),join(long,int),sleep(long),sleep(long,int),这个类的方法,那么它的中断状态将被清除,并且将收到InterruptedException. 中断不活动的线程不会产生任何影响

isInterrupted

查询某线程是否被打断过(查询标志位)

static interrupted()

查询当前线程是否被打断,并设置打断标志位

判断线程是否被中断并清除当前中断状态。

这个方法做了两件事:

  1. 返回当前线程的中断状态,测试当前线程是否已被中断。
  2. 将当前线程的中断状态清零并重新设为false,清除线程的中断状态。如果两虚两次调用此方法,厕第二次调用将返回false,因为连续调用两次的结果可能不一样。

如果向打断一个锁争抢用ReentrantLock,如果允许interrupt干扰枪锁过程,可以用lock.lockInterruptibly()

线程暂停

stop方法会释放锁,造成数据不一致问题。

suspend:停止线程

sesume:恢复线程