多线程之生产者和消费者

本文通过一个Java实现的生产者消费者案例,展示了如何使用多线程进行同步控制。Box类作为共享资源,包含生产者存入和消费者取出的方法。Producer和Customer类分别代表生产者和消费者,通过继承Runnable接口并实现run()方法。测试类BoxDemo启动了两个线程,一个生产,一个消费,实现了资源的共享和同步。
摘要由CSDN通过智能技术生成

多线程之生产者和消费者案例

首先我们必须得定义一个生产者和消费者存放和获取资源的公共厂库,里面有生产者存放产品的方法,消费者获取产品的方法!在这里我们定义为Box类!代码如下:

public class Box {

    private int milk;
    private Boolean state = false;

    public synchronized void put(int milk){
        if(state){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.milk=milk;
        System.out.println("生产者将第"+milk+"瓶奶放入奶箱中");

        state = true;

       notifyAll();
    }

    public synchronized void get(){
        if(!state){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("消费者从奶箱中将第"+milk+"瓶奶取走");

        state = false;

        notifyAll();
    }

}

接下来我们需要定义一个生产者类和一个消费者的类,代码如下:

public class Producer implements Runnable {
    private Box b;

    public Producer(Box b) {
        this.b=b;
    }

    @Override
    public void run() {
        for(int i=1; i<=5; i++){
            b.put(i);
        }
    }
}

public class Customer implements Runnable{

    private Box b;

    public Customer(Box b) {
        this.b=b;
    }

    @Override
    public void run() {
        while (true){
            b.get();
        }
    }
}

多线程实现方法有两种:

第一种是创建一个类直接继承Thread类,然后重写里面的run()方法,多线程的执行代码块就被封装在里面;
第二种是创建一个类实现Runnable接口,重写run()方法,多线程执行的代码也被封装到里面了;

接下来就是创建一个测试类,代码如下:


```java
public class BoxDemo {
    public static void main(String[] args) {
        Box b = new Box();

        Producer p = new Producer(b);

        Customer c = new Customer(b);

        Thread t1 = new Thread(p);

        Thread t2 = new Thread(c);

        t1.start();

        t2.start();
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值