当前位置:   article > 正文

Java多线程技术~生产者和消费者问题_以下程序模拟了”使用线程间通信解决单缓冲的生产-消费问题“的过程。其中,缓冲区

以下程序模拟了”使用线程间通信解决单缓冲的生产-消费问题“的过程。其中,缓冲区

Java多线程技术~生产者和消费者问题

本文是上一篇文章的后续,详情点击该连接

线程通信

应用场景:生产者和消费者问题

       假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费

       如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止

       如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止

分析

       这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件

       对于生产者,没有生产产品之前,要通知消费者等待。而生产了产品之后,又需要马上通知消费者消费

       对于消费者,在消费之后,要通知生产者已经消费结束,需要继续生产新产品以供消费

       在生产者消费者问题中,仅有synchronized是不够的

              synchronized可阻止并发更新同一个共享资源,实现了同步

              synchronized不能用来实现不同线程之间的消息传递(通信)

方法名 作用
final void wait() 表示线程一直等待,直到其它线程通知
void wait(long timeout) 线程等待指定毫秒参数的时间
final void wait(long timeout,int nanos) 线程等待指定毫秒、微妙的时间
final void notify() 唤醒一个处于等待状态的线程
final void notifyAll() 唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程优先运行

消费者,生产者线程代码实现

package com.alvin.test;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Test {
   
    public static void main(String[] args){
   
        //创建共享资源对象
        Shop shop = new Shop();
        //创建生产者
        Boss boss = new Boss(shop);
        //创建消费者
        Customer customer = new Customer(shop);
        //启动线程
        new Thread(boss).start();
        new Thread(customer).start();
    }
}

//生产者类
class Boss implements Runnable{
   
    private Shop shop;
    public Boss(Shop shop){
   
        this.shop = shop;
    }
    @Override
    public void run() {
   
        for(int i = 1; i < 100; i++){
   
            if(i % 2 == 0){
   
                shop.Set("OPPO","reno 3 Pro");
            }else{
   
                shop.Set("HUWEI","Mate 30 Pro");
            }
        }
    }
}

//消费者类
class Customer implements 
  • 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
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/661579
推荐阅读
相关标签
  

闽ICP备14008679号