线程的状态
- new :线程刚创建,还没有启动
- Runnable:可运行状态,有线程调度器可以安排执行
- waiting:等待被唤醒
- Time Waiting:隔一段时间后自动唤醒
- blocked:被阻塞,正在等待锁
- terminated:线程结束
线程打断
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()
查询当前线程是否被打断,并设置打断标志位
判断线程是否被中断并清除当前中断状态。
这个方法做了两件事:
- 返回当前线程的中断状态,测试当前线程是否已被中断。
- 将当前线程的中断状态清零并重新设为false,清除线程的中断状态。如果两虚两次调用此方法,厕第二次调用将返回false,因为连续调用两次的结果可能不一样。
如果向打断一个锁争抢用ReentrantLock,如果允许interrupt干扰枪锁过程,可以用lock.lockInterruptibly()
线程暂停
stop方法会释放锁,造成数据不一致问题。
suspend:停止线程
sesume:恢复线程