zoukankan      html  css  js  c++  java
  • 多线程模拟 客户-购买产品过程

    /**

    一个同学问我多线程安全问题具体怎么操作

    这是个多线程安全模拟实例 

    多线程模拟 客户-购买产品过程

    */

    public class ThreadTest {
    public static void main(String[] args) {
    /**
    * 新建一个列队
    */
    Queue q=new Queue();
    //初始化产品
    Product p=new Product(q);
    //客户购买产品
    Consumer c=new Consumer(q);
    p.start();
    c.start();
    }
    }

    /**
    * 重写Queue
    * @author Administrator
    *
    */
    class Queue {
    // 产品:这里则为产品号码
    int value;

    // 是否有产品
    boolean isvalid = false;

    /**
    * 这里 声明一个put方法去实现 客户购买产品过程
    * 这里需要用同步的方法,避免执行到一半中断
    * isvalid=true 表示还产品存在
    */
    public synchronized void put(int i) {
    if (!isvalid) {
    value = i;
    isvalid = true;
    notify();
    }
    try{//如果isvalid=true,这时候执行wait()方法等待
    wait();//该方法会跑出异常需要捕获
    }catch(Exception e){
    e.printStackTrace();
    }
    }

    /**
    * 客户购买商品
    * 将产品从Queue中移除 及isvalid=false
    * @author Administrator
    *
    */
    public synchronized int get() {
    //如果isvalid=true 则说明有产品
    // 反之则没有产品,调用wait()方法等待
    if (!isvalid) {
    try {
    wait();// 该方法会跑出异常需要捕获
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    //客户购买成功之后,isvalid状态改变
    isvalid = false;
    notify();
    return value;
    }

    }

    /**
    * Product为产品 将数据库里的货物放在Queue中 这里的话放入1-10只是用来测试
    *
    * @author
    *
    */
    class Product extends Thread {

    Queue q;

    public Product(Queue q) {
    // TODO Auto-generated constructor stub
    this.q = q;
    }

    public void run() {
    /**
    * 将产品放入
    */
    for (int i = 1; i < 10; i++) {
    q.put(i);
    System.out.println("Product id: " + i);
    }

    }

    }

    /**
    * 客户购买商品
    *
    * @author Administrator
    *
    */
    class Consumer extends Thread {
    Queue q;

    public Consumer(Queue q) {
    // TODO Auto-generated constructor stub
    this.q = q;
    }

    public void run() {
    while (true) {
    System.out.println("Consumer get: " + q.get());
    }
    }
    }

    北上广深是个高节奏的生活,作为一个新人,很多时候我们都在感叹职位上老人的智慧。以前通过搜索引擎,80%的问题都有答案。那么现在我是觉得90%都会有答案。那么作为我们新人的的核心竞争力到底在哪里?
  • 相关阅读:
    计数问题
    自定义中间件
    中间件的数据流向
    模块化
    开发属于自己的包
    中间件
    java JDK环境变量配置
    uni-app 请求 uni.request封装使用
    uni-app 自定义 简单 底部tab
    vue 过滤器 filter 的使用
  • 原文地址:https://www.cnblogs.com/harry-Consonance/p/6531934.html
Copyright © 2011-2022 走看看