美文网首页Java高级编程
多线程案例分析二:生产电脑

多线程案例分析二:生产电脑

作者: 江湖非良人 | 来源:发表于2019-07-23 11:52 被阅读11次

  设计一个生产电脑和搬运电脑类,要求生产出一台电脑,就搬走一台电脑,如果没有新的电脑生产出来,则搬运工需要等待新电脑产出;如果生产出的电脑没有搬走,则要等待电脑搬走再生产,并统计处生产的电脑数。
  在本程序中,就是一个标准的生产者和消费者的处理模型,那么下面市县具体的程序代码。

public class ThreadDemo {
    public static void main(String[] args) throws Exception {
        Resource res = new Resource();
        Producer st = new Producer(res);
        Consumer at = new Consumer(res);
        new Thread(at).start();
        new Thread(at).start();
        new Thread(st).start();
        new Thread(st).start();
    }
}
class Producer implements Runnable {
    private Resource resource;
    public Producer(Resource resource) {
        this.resource = resource;
    }
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            try {
                this.resource.make();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class Consumer implements Runnable {
    private Resource resource;
    public Consumer(Resource resource) {
        this.resource = resource;
    }
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            try {
                this.resource.get();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class Resource {
    private Computer computer;
    public synchronized void make() throws InterruptedException {
        while (computer != null) {//已经生产过了
            wait();
        }
        Thread.sleep(100);
        this.computer = new Computer("DELL", 1.1);
        System.out.println("【生产】" + this.computer);
        notifyAll();
    }
    public synchronized void get() throws InterruptedException {
        while (computer == null) {//已经生产过了
            wait();
        }
        Thread.sleep(10);
        System.out.println("【搬运】" + this.computer);
        this.computer = null;
        notifyAll();
    }
}
class Computer {
    private static int count;//表示生产的个数
    private String name;
    private double price;
    public Computer(String name, double price) {
        this.name = name;
        this.price = price;
        this.count++;
    }
    @Override
    public String toString() {
        return "【第" + count + "台电脑】电脑名字:" + this.name + "价值、" + this.price;
    }
}

相关文章

  • 多线程案例分析二:生产电脑

      设计一个生产电脑和搬运电脑类,要求生产出一台电脑,就搬走一台电脑,如果没有新的电脑生产出来,则搬运工需要等待新...

  • 2020-12-16-Spark-24(复习提纲)

    1.使用工具类时的多线程问题,多线程问题2.topN案例 组内排序案例的性能分析3.开窗案例再写一遍4.spark...

  • 综合实战:“生产者-消费者”模型

      在多线程的开发过程之中最为著名的案例就是生产者和消费者操作,该操作的主要流程如下: 生产者负责信息内容的生产;...

  • 生产者-消费者 模型

    生产者与消费者基本程序模型 在多线程开发过程之中最为著名的案例就是生产者与消费者操作,该操作的主要流程如下:生产者...

  • 抢红包案例分析以及代码实现(四)

    前文回顾 抢红包案例分析以及代码实现(一) 抢红包案例分析以及代码实现(二) 抢红包案例分析以及代码实现(三 ) ...

  • 《财务报表分析》综合案例分析

    综合案例分析——格力电器2016 一、背景分析 (一) 公司的基本情况、生产经营特点以及所处行业的分析 公司主...

  • 如何使用Eclipse内存分析工具定位内存泄露

    本文以我司生产环境Java应用内存泄露为案例进行分析,讲解如何使用Eclipse的MAT分析定位问题 一. 背景 ...

  • 2019-04-24

    基于生产者与消费者的多线程Python实现 生产者生产,消费者消费,都是针对二者共同的钱包,生产者生产的钱放入钱包...

  • 案例分析(二)

    项目方向:成人教育。 项目名称:某在线商学院。 第一部分、九大选盘指标 【1.定位】 帮助-1到5岁的职场新人提升...

  • 多线程

    进程 线程 多线程卖票案例

网友评论

    本文标题:多线程案例分析二:生产电脑

    本文链接:https://www.haomeiwen.com/subject/ynkolctx.html