Java中线程状态和等待唤醒机制和线程池的实现方法

  介绍

这篇文章将为大家详细讲解有关Java中线程状态和等待唤醒机制和线程池的实现方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强> 1。概念

线程一共有6中状态,相互之间可以互相转换。

癑ava中线程状态和等待唤醒机制和线程池的实现方法"

等待唤醒案例(线程之间的通信)

癑ava中线程状态和等待唤醒机制和线程池的实现方法"

实现:

等待唤醒案例:线程之间的通信
创建一个顾客线程(消费者):告知老板要的包子的种类和数量,调用等方法,放弃cpu的执行,进入到等待状态(无限等待)
创建一个老板线程(生产者):花了5秒做包子,做好包子之后,调用通知方法,唤醒顾客吃包子

注意:
顾客和老板线程必须使用同步代码块包裹起来,保证等待和唤醒只能有一个在执行
同步使用的锁对象必须保证唯一
只有锁对象才能调用等待和通知方法

Obejct类中的方法
空白等()
在其他线程调用此对象的通知()方法或notifyAll()方法前,导致当前线程等待。
的通知()
唤醒在此对象监视器上等待的单个线程。
会继续执行等方法之后的代码

进入到TimeWaiting(计时等待)有两种方式
1。使用睡眠(长米)方法,在毫秒值结束之后,线程睡醒进入到可运行/阻塞状态
2。使用等(久米)方法,等待方法如果在毫秒值结束之后,还没有被通知唤醒,就会自动醒来,线程睡醒进入到可运行/阻塞状态

唤醒的方法:
无效通知()唤醒在此对象监视器上等待的单个线程。
空白notifyAll()唤醒在此对象监视器上等待的所有线程。

public  static  void  main (String [], args), {//才能创建锁对象,保证唯一   final 才能Object  obj =, new 对象();//,才能创建一个顾客线程(消费者)   new 才能;线程(){   ,,@Override   ,,,public  void 运行(),{   ,,,,,//一直等着买包子   ,,,,,,(真正的){   ,,,,,,,//保证等待和唤醒的线程只能有一个执行,需要使用同步技术   ,,,,,,,synchronized  (obj) {   ,,,,,,,,,System.out.println(“顾客1告知老板要的包子的种类和数量“);   ,,,,,,,,,//调用等方法,放弃cpu的执行,进入到等待状态(无限等待)   ,,,,,,,,,try  {   ,,,,,,,,,,,obj.wait ();   ,,,,,,,,,},catch  (InterruptedException  e), {   ,,,,,,,,,,,e.printStackTrace ();   ,,,,,,,,,}   ,,,,,,,,,//唤醒之后执行的代码   ,,,,,,,,,System.out.println(“包子已经做好了,顾客1开吃!“);   ,,,,,,,,,System.out.println(“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -产生绯闻;);   ,,,,,,,}   ,,,,,}   ,,,}   }.start才能();//,才能创建一个顾客线程(消费者)   new 才能;线程(){   ,,@Override   ,,,public  void 运行(),{   ,,,,,//一直等着买包子   ,,,,,,(真正的){   ,,,,,,,//保证等待和唤醒的线程只能有一个执行,需要使用同步技术   ,,,,,,,synchronized  (obj) {   ,,,,,,,,,System.out.println(“顾客2告知老板要的包子的种类和数量“);   ,,,,,,,,,//调用等方法,放弃cpu的执行,进入到等待状态(无限等待)   ,,,,,,,,,try  {   ,,,,,,,,,,,obj.wait ();   ,,,,,,,,,},catch  (InterruptedException  e), {   ,,,,,,,,,,,e.printStackTrace ();   ,,,,,,,,,}   ,,,,,,,,,//唤醒之后执行的代码   ,,,,,,,,,System.out.println(“包子已经做好了,顾客2开吃!“);   ,,,,,,,,,System.out.println(“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -产生绯闻;);   ,,,,,,,}   ,,,,,}   ,,,}   }.start才能();//创才能建一个老板线程(生产者)   new 才能;线程(){   ,,@Override   ,,,public  void 运行(),{   ,,,,,//一直做包子   ,,,,,while (真正的){   ,,,,,,,//花了5秒做包子   ,,,,,,,try  {   ,,,,,,,,,thread . sleep(5000);//花5秒钟做包子   ,,,,,,,},catch  (InterruptedException  e), {   ,,,,,,,,,e.printStackTrace ();   ,,,,,,,}      ,,,,,,,//保证等待和唤醒的线程只能有一个执行,需要使用同步技术   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java中线程状态和等待唤醒机制和线程池的实现方法