OS中经典问题之消费者-生产者同步问题

简介: OS中经典问题之消费者-生产者同步问题
package java1;
/**
 *OS中经典问题之消费者-生产者同步问题
 * @author: Jerry Jin
 * @Email: jerry20200717@163.com
 * @version: 1.0.1
 * @date: 2021-10-07-17:44
 */
class Clerk{
    private int productCount = 0;
    public synchronized void produceProduct() {
        if (productCount<20){
            productCount++;
            notify();
            System.out.println(Thread.currentThread().getName()+ " 开始生产第 "+productCount+" 产品。。。");
        }else {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public synchronized void comsumeProduct() {
        if (productCount>0){
            System.out.println(Thread.currentThread().getName()+ " 开始消费第 "+productCount+" 产品。。。");
            productCount--;
            notify();
        }else {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class Producer extends Thread{
   private Clerk clerk;
    public Producer(Clerk clerk) {
        this.clerk = clerk;
    }
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+ " :开始生产。。。");
        while (true){
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            clerk.produceProduct();
        }
    }
}
class Customer extends Thread{
    private Clerk clerk;
    public Customer(Clerk clerk) {
        this.clerk = clerk;
    }
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+ " :开始消费。。。");
        while (true){
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            clerk.comsumeProduct();
        }
    }
}
public class ProductTest {
    public static void main(String[] args) {
        Clerk clerk = new Clerk();
        Producer p1 = new Producer(clerk);
        Producer p2 = new Producer(clerk);
        p1.setName("生产者1");
        p2.setName("生产者2");
        p1.start();
        p2.start();
        Customer c1 = new Customer(clerk);
        Customer c2 = new Customer(clerk);
        c1.setName("消费者1");
        c2.setName("消费者2");
        c1.start();
        c2.start();
    }
}
相关文章
|
6月前
|
Java
操作系统基础:进程同步【下】
操作系统基础:进程同步【下】
|
5月前
|
算法 数据库
操作系统:经典进程同步问题的高级探讨
操作系统:经典进程同步问题的高级探讨
78 1
|
6月前
|
算法 安全 调度
【操作系统】进程同步与进程互斥
【操作系统】进程同步与进程互斥
69 2
|
3月前
|
安全
操作系统中的同步和监视器经典问题
【8月更文挑战第23天】
34 0
|
6月前
|
C++
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
248 6
|
6月前
|
算法 安全 调度
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
142 0
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
|
5月前
|
Rust 算法 安全
操作系统之进程同步
操作系统之进程同步
49 0
|
6月前
|
缓存 算法 Java
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(4)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
144 0
|
6月前
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(3)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
279 0

热门文章

最新文章