生产者与消费者实现原理

多线程的开发中有一个最经典的操作案例, 就是生产者-消费者,生产者不断生产产品, 消费者不断取走产品。

一,多线程的关键点回顾

1.1 什么是进程?

程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次 执行过程,它是一个动态的概念。
进程是一个具有一定独立功能的程序,一个实体,每一个进程都有它自己的地址空间。

1.2 进程的状态

运行中的进程具有以下三种基本状态:

  1. 就绪状态(Ready)
  2. 运行状态(Running)
  3. 阻塞状态(Blocked)
    在这里插入图片描述

1.3 线程实现的方式

实现方式1:继承Thread类

class MyThread extends Thread{
    
	public void run(){
    
				//逻辑处理 
			} 
	}
MyThread mt = new MyThread(); 
mt.start();

实现方式2:实现Runnable接口

class MyRunnable implements Runnable{
   
 	public void run(){
   
  			//逻辑处理
   		}
    }
    MyRunnable mr = new MyRunnable();
    Thread t = new Thread(mr);
    t.start();

1.4 线程的状态

  • New(初始化状态)
  • Runnable(可运行/运行状态)
  • Blocked(阻塞状态)
  • Dead(终止状态)

注意一个区别:
线程的休眠:使用sleep方法实现,使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),释放CPU的时间片,具体取决于系统定时器和调度程序的精度和准确性。 线程不会丢失任何显示器的所有权。

线程等待:使用wait方法实现,让线程暂时停止执行,释放CPU的时间片,并释放对象监视器的所有权,等待其它线程通过 notify方法来唤醒。

二,生产者与消费者案列分析

饭店里的有一个厨师和一个服务员,这个服务员必须等待厨师准备好膳食。 当厨师准备好时,他会通知服务员,之后服务员上菜,然后返回继续等待。
这是一个任务协作的示例,厨师代表生产者,而服务员代表消费者。

//食物(两个线程需要共享的数据对象)
class Food{
   
    private String name; //菜名
    private String description; //菜的功效
    private float price; //单价
    private boolean flag = true; //true表示可以生产,false表示可以消费

    public Food() {
   
    }

    public Food(String name,
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值