关于线程状态、阻塞操作以及中断操作的一些总结

版权声明:未经允许禁止转载 https://blog.csdn.net/weixin_38481963/article/details/88089063

1、线程的状态
线程有5中状态;

1、新建状态:当线程被创建时,它短暂的处于这种状态。此时他已经分配了必要的资源并进行了初始化。

2、就绪状态:在这种状态下,只要调度器把时间 片分给线程,线程就可以运行。

3、运行状态:在这种状态下,线程得到CPU时间,执行代码;

4、阻塞状态:线程可以运行,但某个条件阻止它运行。

5、死亡状态:死亡状态的线程是不可调度的。正常从run()返回,或者抛出异常。

1、在这里插入图片描述

2、几种方法的比较

  1. Thread.sleep(long i); 当前线程进入阻塞状态,但线程不会释放获取的锁
  2. Thread.yield();线程让出cpu时间。该方法不会导致阻塞
  3. t.join();当前线程调用其他线程的join方法,当前线程进入阻塞状态,但不会释放获取的锁。
  4. obj.wait();当前线程 释放获取的锁对象 ,当前线程进入等待队列,直到被notify()、notifyAll()唤醒或者到执行时间自动唤醒(obj.wait(long timeout));

3、关于interrupt、interrupted、isInterrupted

1、interrupt(); 方法,一个线程调用另一个线程的interrupt()方法,另一个线程会被标志位中断状态。

2、interrupted();方法,返回当前线程的中断状态并清除中断状态。

3、isInterrupted();方法,返回当前线程的中断状态,但不清除。

当在线程上调用 interrupt() 时,中断发生的唯一时刻是在任务要进入到阻塞操作中,或者已经在阻塞操作内部时。

猜你喜欢

转载自blog.csdn.net/weixin_38481963/article/details/88089063
今日推荐