posts - 397,comments - 0,views - 25332

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

    创建一个顾客线程(消费者):告知老板要的包子的种类和数量,调用wait方法,放弃cpu的执行,进入到WALITTNG状态(无限等待)

    创建一个老板线程(生产者):花了5秒做包子,做好包子之后,调用notify方法,唤醒顾客吃包子。

注意:

  顾客和老板线程必须使用同步代码块包裹起来,保证等待和唤醒只能有一个在执行

  同步使用的锁对象必须保证唯—

  只有锁对象才能调用wait和notify方法

 

Object类中的方法:void wait()在其他线程调用此对象的notify()方法或notifyALl()方法前,导致当前线程等待。

void notify:唤醒在此对象监视器上等待的单个线程。会继续执行wait方法之后的代码

 

举例:

复制代码
public static void main(String[] args) {

        final Object o = new Object();
        new Thread(){
            @Override
            public void run() {
                while (true){
                    synchronized (o){
                        System.out.println("数量");
                        try {
                            o.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }.start();

        new Thread(){
            @Override
            public void run() {
                while (true){
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (o){
                        System.out.println("可以吃包子");
                        o.notify();
                    }
                }
            }
        }.start();
 
    }
复制代码

 

 

线程间通信:

概念:多个线程在处理同意一个资源,但是处理的动作线程的任务却不同

比如∶线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。

为什么要处理线程间通信:

多个线程并发执行时,在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且我们

希望他们有规律的执行,那么多线程之间需要一些协调通信,以此来帮我们达到多线程共同操作一份数据。

如何保证线程间通信有效利用资源:

多个线程在处理同一个资源,并且任务不同时,需要线程通信来帮助解决线程之间对同一个变量的使用或操作。

就是多个线程在操作同一份数据时,避免对同一共享变量的争夺。也就是我们需要通过一定的手段使各个线程能

有效的利用资源。而这种手段即――等待唤醒机制

图:

 

 

posted on   淤泥不染  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示