相关概念

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

  • 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. python 装饰器(一):装饰器基础(一)装饰器形式,何时执行

    简介 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象. 形式 假如有个名为 decorate 的装饰器: ...

  2. bzoj2697特技飞行*

    bzoj2697特技飞行 题意: N个单位时间,每个单位时间可以进行一项特技动作,可选的动作有K种,每种动作有一个刺激程度Ci.每次动作的价值为(距上次该动作的时间)*Ci,若为第一次进行该动作,价值 ...

  3. nodejs之数据库连接

    nodejs 对 MySQL.mongodb.redis 数据库的连接方式. MySQL: var mysql = require('mysql') var { MYSQL } = require(' ...

  4. Python Ethical Hacking - DNS Spoofing

    What is DNS Spoofing Sniff the DNSRR packet and show on the terminal. #!/usr/bin/env python from net ...

  5. 【DevCloud·敏捷智库】如何利用用户故事了解需求

    摘要:这篇文章主要解决因为不能很好地理解需求而估算做不好的问题,在这里可以了解下如何利用用户故事了解需求. 背景 很多团队在应用敏捷开发时,对估算经常感到困惑.这里所说的估算是指产品列表条目(PBI, ...

  6. p41_数据报与虚电路

    一.定义 数据报方式为网络层提供无连接服务. 无连接服务:不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同. 虚电路方式为网络层提供连接服务 连接服务:首先为分组的传 ...

  7. zabbix自定义监控(当会话登录超过三个就报警)

    安装过程在此省略. 1.agent端去修改配置文件 2.调用自定义内容 vim /etc/zabbix/zabbix_agentd.d/login.conf UserParameter=login-u ...

  8. eclipse GIT本地库分支操作

    git分支是一个重要的知识点,平时我们开发主要结合eclipse,idea来操作,今天这贴主要以eclipse来操作git本地库分支,主要内容包括新建分支,切换分支,合并分支,冲突解决,重命名分支,删 ...

  9. animation动画汇总(一阶段项目)

    animation 属性 动画属性: 1.animation-name:规定需要绑定到选择器的 keyframe 名称. 2.animation-duration:规定完成动画所花费的时间,以秒或毫秒 ...

  10. Day12_搜索过滤

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...