相关概念

  • 锁:解决线程间冲突的问题

  • wait&notify:解决线程间协作的问题

  • wait和sleep的区别

    wait期间对象锁是释放的,而sleep只能延时,并未释放锁

  • 调用wait方法:暂停正在执行的线程,放弃CPU执行权,并释放资源锁

  • 调用notify方法:唤醒暂停的线程使之运行

生产者&消费者模型

场景逻辑:定义两个类,分别为商店和顾客。顾客随机点可乐,鸡翅等食物,商店生产对应的食物,然后顾客食用食物

核心:定义一个全局对象实现多线程情况下线程间的可见,以实现线程协作

package com.noneplus;

public class Main {

    private final Object flag = new Object();

    private static String[] food = {"可乐", "鸡翅", "鸡腿", "披萨"};

    private static String foodType;

    public static void main(String[] args) {

        Main main = new Main();

        Thread store = main.new Store();

        Thread customer1 = main.new Customer();

        store.start();

        customer1.start();

    }

    class Store extends Thread {

        @Override
public void run() {
while (true) { synchronized (flag) {
flag.notify();
if (Main.foodType==null)
{
System.out.println("暂无订单");
}
else
{
System.out.println("生产:" + Main.foodType);
try {
flag.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
} class Customer extends Thread { @Override
public void run() { while (true) {
synchronized (flag) {
flag.notify();
Main.foodType = Main.food[(int) (Math.random() * 3)]; System.out.println("订购:" + Main.foodType); try {
flag.wait();
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println("食用: " + Main.foodType);
System.out.println("===============");
}
}
}
}
}
订购:可乐
生产:可乐
食用: 可乐
===============
订购:鸡腿
生产:鸡腿
食用: 鸡腿
===============
订购:鸡翅
生产:鸡翅
食用: 鸡翅

参考:Java 多线程编程之:notify 和 wait 用法

线程通讯wait&notify的更多相关文章

  1. 线程同步(使用了synchronized)和线程通讯(使用了wait,notify)

    线程同步 什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题. 实现同步机制有两个方法:1.同 ...

  2. java多线程(2)---生命周期、线程通讯

    java生命周期.线程通讯 一.生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别.    1.yield()方法 yield()让当前正在运行的线程回到就绪 ...

  3. java多线程(五)线程通讯

    1.1. 为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信. 1.2. 线程通讯方式 线程间通信常用方式如下 ...

  4. Java线程通讯方法之wait()、nofity() 详解

    Java线程通讯方法之wait().nofity() 详解 本文将探讨以下问题: synchronized 代码块使用 notify()与notifyAll()的区别 Java wait(),noti ...

  5. Android 线程通讯类Handler

    handler是线程通讯工具类.用于传递消息.它有两个队列: 1.消息队列 2.线程队列 消息队列使用sendMessage和HandleMessage的组合来发送和处理消息. 线程队列类似一段代码, ...

  6. Android——线程通讯 Handler、Looper、Message;

    线程通讯问题 (主要用到了Handler类,Looper类和Message类以及MessageQueue) 在Android中主线程如何向子线程中发送消息的问题.让我们来想想,这其中的过程,无非就是创 ...

  7. Android——线程通讯类Handler(转)

    原文地址:http://uule.iteye.com/blog/1705951 handler是线程通讯工具类.用于传递消息.它有两个队列:1.消息队列2.线程队列 消息队列使用sendMessage ...

  8. 线程中wait/notify/notifyAll的用法

    前言 多线程时,最关注的就是线程同步,线程间的同步一般用锁来实现,常见的锁就是synchronized和lock.用了synchronized,就不得不提到wait/notify/notifyAll. ...

  9. Java并发之(2):线程通信wait/notify(TIJ_21_5)

    简介: java中线程间同步的最基本的方式就是使用wait()&notify()&notifyAll(),它们是线程间的握手机制.除了上述方法,java5还在java.util.con ...

随机推荐

  1. CSS之Bootstrap(快速布局)

    简介 什么是Bootstrap? Bootstrap官网 框架:库 lib library jQuery作为一个框架来讲,提供一套比较便捷的操作DOM的方式 把大家都需要的功能预先写好到一些文件 这就 ...

  2. HTML学习分享(一)

    HTML学习小结(一) 1.css的全称是什么? 2.样式表的组成 3.浏览器读取编译css的顺序? (1)HTML基本选择器 1.通配符选择器 * { margin: 0; padding: 0; ...

  3. Interllij Idea 环境必要配置

    必要设置:https://blog.csdn.net/weixin_43378248/article/details/84673406 1. @Autowired 取消错误提示 (1)选择file - ...

  4. Ethical Hacking - GAINING ACCESS(6)

    Server Side Attack Analysing scan results and exploiting target system. Go to the Analysis page and ...

  5. C++ 简单介绍线段树

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上k. 求出某区间每一个数的和. 输入格式 第一行包含两个整数n,m分别表示该数列数字的个数和操作的总个数. 第二行包含n个用 ...

  6. ISE第三方编辑器的使用

    刚开始使用ISE时候感觉ISE自带的编辑器并没有什么难用的,但是在看到了小梅哥的视频教学中那样行云流水般的操作让我心动不已,由此找到了相关的编辑器.为了以后看着方便直接摘取了前人的经验在我自己的博客中 ...

  7. pycharm控制台输出的日志全是红色的字体?

    问题:logging在pycharm控制台输出的日志的字体全是红色的,怎么办? 图片描述: 解决办法:设置 -> 搜索“Console” ->  结果:改完立马生效

  8. phpMyAdmin历史漏洞复现

    简介 phpMyAdmin是一个非常受欢迎的基于web的MySQL数据库管理工具.它能够创建和删除数据库,创建/删除/修改表格,删除/编辑/新增字段,执行SQL脚本等 复现三个古老漏洞 phpMyAd ...

  9. ~~网络编程(三):TCP/UDP~~

    进击のpython ***** 网络编程--TCP/UDP协议 其实你也发现了,应用层是交给应用来处理的,我们什么也做不了 相较于网络编程来说,我们更重要的是在做应用层和传输层的对接 因为你也看到了, ...

  10. ffmpeg获取视频封面图片

    ffmpeg百度云盘下载地址:https://pan.baidu.com/s/1Am_x0abBvXTrbCFPHs5e9Q 提取码:4y2r /** * ffmpeg百度云盘下载地址:https:/ ...