首页 > 其他分享 >线程通信分解3

线程通信分解3

时间:2022-12-24 09:11:10浏览次数:36  
标签:String brand 通信 flag 分解 线程 void public name

【1】

 

 

【2】

package com.msb.test11;

/**
 * @author : liu
 * 日期:15:42:06
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Product {//商品类
    //品牌
    private String brand;
    //名字
    private String name;
    //引入一个标记“灯”true 红色 false绿色
    boolean flag=false; //默认情况下没有商品,让生产者先生产再消费
    //setter,getter方法:
    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    //生产商品
    public synchronized void setProduct(String brand ,String name){
        if(flag==true){
            try {
                //等待
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
            this.setBrand(brand);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            this.setName(name);

            System.out.println("生产者生产了:"+this.getBrand() + "---"+ this.getName());
            //生产完毕:灯变色
            flag=true;
            //告诉消费者赶紧来消费
            notify();
    }
    //消费商品
    public synchronized void getProduct(){
        if (flag==false){//没有商品等待生产者生产
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //有商品,消费:
        System.out.println("消费者消费了:"+ this.getBrand()+"---"+ this.getName());
        //消费完:灯变色
        flag=false;
        //告诉生产者生产
        notify();
    }
}
package com.msb.test11;

/**
 * @author : liu
 * 日期:15:45:09
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class ProducerThread extends Thread{//生产者线程
    //共享商品
    private Product p;

    public ProducerThread(Product p) {
        this.p = p;
    }
    @Override
    public void run() {
        for (int i = 1; i <= 10; i++) {//生产十个商品
            if (i%2==0){
                p.setProduct("费列罗","巧克力");
            }else{
                p.setProduct("哈尔滨","啤酒");
            }
        }
    }
}
package com.msb.test11;

/**
 * @author : liu
 * 日期:16:02:52
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class CustomerThread extends Thread{//消费者线程
    //共享商品资源
    private Product p;

    public CustomerThread(Product p) {
        this.p = p;
    }

    @Override
    public  void run() {
        synchronized (p){
            for (int i = 1; i <= 10 ; i++) {//消费次数
                p.getProduct();
            }
        }

    }
}

 

【3】原理

 

注意wait(),notify()方法是必须放在同步代码快中的

 

标签:String,brand,通信,flag,分解,线程,void,public,name
From: https://www.cnblogs.com/jeldp/p/17002003.html

相关文章

  • 【S-V信道】基于毫米波的5G通信S-V信道模型仿真
    1.软件版本MATLAB2021a2.本算法理论知识由于大气中存在一定含量的极化氧分子和水汽(如图3.1所示),因此毫米波在传输过程中容易被大气吸收,从而导致信号衰减,影响通信质量[1......
  • 多线程
    多线程什么是进程?什么是线程?进程是一个应用程序(1个进程是一个软件)。线程是一个进程中的执行场景/执行单元。一个进程可以启动多个线程。对于java程序来说,当在DOS命令......
  • C++加载位图跟SOCKET通信的编写
    //将屏幕信息转换为位图结构CDC*pDeskDC=GetDesktopWindow()->GetDC();//获取桌面的额画图对象intwidth=300;intheight=300;CDCmemDC;//定义一个内存......
  • QT实现CAN通信
    #include"connectdialog.h"#include"ui_connectdialog.h"#include<QCanBus>ConnectDialog::ConnectDialog(QWidget*parent):QDialog(parent),m_ui(newUi::Con......
  • 【并发技术系列】「多线程并发编程」技术体系和并发模型的基础探究(夯实基础)
    让我们通过本篇文章一同进入并发编程技术的世界里面,相信通过这篇文文章一定会对话你的并发技术体系有一定帮助以及夯实你的基础功底。基本概念并发concurrency并行paralleli......
  • 线程通信问题分解2
    【1】利用同步代码块解决问题packagecom.msb.test10;importcom.sun.media.sound.RIFFInvalidDataException;/***@author:liu*日期:16:02:52*描述:Intel......
  • Java中线程的6种状态详解
    java.lang.Thread.State枚举类中定义了六种线程的状态,可以调用线程Thread中的getState()方法获取当前线程的状态。publicenumState{NEW,RUNNABLE,......
  • 线程通信问题分解1
    packagecom.msb.test10;/***@author:liu*日期:15:42:06*描述:IntelliJIDEA*版本:1.0*/publicclassProduct{//商品类//品牌privateStr......
  • 线程通信问题 引入
    应用场景:生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费如果仓库中没有产品,则生产者将产品放入仓库,否则停止......
  • java线程池原理
    内容:  1、什么是线程池      2、线程池的优点      3、java线程池原理(重点)      4、理解java线程池(重点)      5、......