Object类中wait带参方法和notifyAll方法与线程间通信
Object类中wait带参方法和notifyAll
进入到Timewaiting(计时等待)有两种方式
1.使用sLeep(long m)方法,在毫秒值结束之后,线程睡醒进入到Runnable/Blocked状态
2.使用wait(long m)方法, wait方法如果在毫秒值结束之后,还没有被notify唤醒,就会自动醒来,线程睡醒进入到Runnable/Blocked状态
唤醒的方法:
void notify() 唤醒在此对象监视器上等待的单个线程。
void notifyAll()唤醒在此对象监视器上等待的所有线程。
public static void main(String[] args) { //创建锁对象,保证唯一 Object obj = new Object(); //创建一个顾客线程(消费者) new Thread() { @Override public void run() { while (true){ //保证等待和唤醒的线程只能有一-个执行,需要使用同步技术 synchronized (obj) { System.out.println("顾客1告知老板要的包子的种类和数量"); //调用wait方法,放弃cpu的执行,进入到WwAI TING状态(无限等待) try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } //唤醒之后执行的代码 System.out.println("包子已经做好了,顾客1开吃"); System.out.println("========================="); } } } }.start(); //创建锁对象,保证唯一 Object obj1 = new Object(); //创建一个顾客线程(消费者) new Thread() { @Override public void run() { while (true){ //保证等待和唤醒的线程只能有一-个执行,需要使用同步技术 synchronized (obj1) { System.out.println("顾客2告知老板要的包子的种类和数量"); //调用wait方法,放弃cpu的执行,进入到WwAI TING状态(无限等待) try { obj1.wait(); } catch (InterruptedException e) { e.printStackTrace(); } //唤醒之后执行的代码 System.out.println("包子已经做好了,顾客2开吃"); System.out.println("========================="); } } } }.start(); //创建一个老板线程(生产者) new Thread() { @Override public void run() { while (true){ //花了5秒做包子 try { Thread.sleep(5000);//花5秒钟做包子 } catch (InterruptedException e) { e.printStackTrace(); } //保证等待和唤醒的线程只能有-一个执行,需要使用同步技术 synchronized (obj) { System.out.println("老板5秒钟之后做好包子,告知顾客,可以吃包子了"); //做好包子之后,调用notify方法,唤醒顾客吃包子 obj.notifyAll(); } } } }.start(); }
线程间通信
概念:多个线程在处理同一一个资源,但是处理的动作(线程的任务)却不相同。
比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。
为什么要处理线程间通信:
多个线程并发执行时,在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成- -件任务 ,并且我们希望他们有规律的执行,那么多线程之间需要一些协调通信 ,以此来帮我们达到多线程共同操作一份数据。
如何保证线程间通信有效利用资源:
多个线程在处理同一一个资源,并且任务不同时,需要线程通信来帮助解决线程之间对同一个变量的使用或操作。
就是多个线程在操作同一-份数据时,避免对同- -共享变量的争夺。也就是我们需要通过一定的手段使各个线程能
有效的利用资源。而这种手段即一-等待唤醒机制。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix