线程间状态及通信方式


1、初始状态:

  •     创建一个线程类,它实现Runnable或继承Thread。当这个类被new出来时(新实例简称newT),线程进入初始状态。

2、可运行状态:

  •     newT执行start()方法,即可进入可运行状态。
  •     当sleep睡醒时,或者被join插入的方法结束时,或者用户输入结束,可以进入可运行状态。
  •     当cpu时间片用完,调用线程的yield方法,进入可运行状态。
  •     锁池队列拿到对象锁后进入可执行状态

3、运行状态:

  •     可运行状态被CPU调度程序调度

4、阻塞状态:

  •     newT调用sleep方法进入阻塞状态
  •     secondT join进newT线程中进入阻塞状态
  •     等待用户输入时进入阻塞状态

5、锁池队列状态

  •     当newT希望调用一个对象的Synchronized方法时,发现该方法被其他线程占用,则newT进入锁池状态。
  •     当newT被secondT唤醒时,newT进入锁池状态

6、等待队列状态:

  •     当调用wait方法时会进入等待队列,需要注意执行wait必须先获得对象锁

7、结束状态:

  •     当线程的run()方法完成时进入结束状态
  •     主线程的main()方法完成时进入结束状态


线程通信方式:wait/notify

我们注意到 Object类有一些方法,其中就有wait()和notify()方法,

wait()方法放弃了CPU时间,进入阻塞状态。

notify()方法通知阻塞的线程,使得线程被唤醒。这就是最常用的通讯方式之一

线程通信方式:同步

当两个线程同时持有一个类的对象实例,当两个线程分别调用同步方法(不同的方法),那么两个线程都要有其中一个执行,另一个等待,然后等第一个线程执行完毕再次执行。这也是交互手段之一。

猜你喜欢

转载自blog.csdn.net/qq_31615049/article/details/80616540