zoukankan      html  css  js  c++  java
  • 实例225 模拟淘宝购物买卖双方交易问题

    实例225  模拟淘宝购物买卖双方交易问题

    import java.util.Random;
    
    public class OnlineStore {
    	public static void main(String[] args){
    		Alipay alipay = new Alipay(2);		//创建2个支付宝
    		//创建实例并启动线程
    		new Seller("卖家-衣拉客",alipay,5).start();
    		new Seller("卖家-衣院", alipay, 7).start(); 
    		new Buyer("买家-小A",alipay,101).start();
    		new Buyer("买家-小B",alipay,102).start();
    	}	
    }
    
    class Alipay{	// 支付宝 用于网上买卖交易
    	private final String[] goods;	//标识卖家商品,数组的长度是多少则表示商品的数量是多少
    	private int n;	//标识存入支付宝交易数量
    	private int m;	//标识支出支付宝交易数量
    	private int count;
    	
    	public Alipay(int count){	 // 构造方法进行初始化
    		this.goods = new String[count];	//创建字符串数组
    		this.m = 0;		
    		this.n = 0;
    		this.count = 0;		
    	}
    	
    	public synchronized void storage(String alipay){	// 往支付宝里存款
    		System.out.println("淘宝用户ID=" + Thread.currentThread().getName()
    				+ "\t支付宝存入" + alipay);
    		try{
    			while(count >= goods.length){
    				wait();	// 线程等待
    			}
    			goods[n] = alipay;	// 放置支付宝账号于数组
    			n = (n + 1) % goods.length;
    			count++;
    			notifyAll();
    		}catch(Exception e){	// 捕获异常
    			System.out.println("支付宝存入功能出现错误:" + e.getMessage());
    		}
    	}
    	
    
    public synchronized String outlay(){	// 往支付宝里支出
    	String alipay = null;
    	try{
    		while(count <= 0){
    			wait();		// 线程等待
    		}
    		alipay = goods[m];
    		m = (m + 1) % goods.length;		//支出支付宝交易数量
    		count--;	// 数组个数减一
    	}catch(Exception e){
    		
    	}
    	System.out.println("淘宝用户ID=" + Thread.currentThread().getName()
    			+ "\t支付宝支出" + alipay);
    	return alipay;
    }
    
    }
    
    class Buyer extends Thread{	// 买家线程类
    	
    	private final Random random;
    	private final Alipay alipay;
    	private static int id = 0;  //// 交易的流水号
    	
    	public Buyer(String name, Alipay alipay,long seed){	// 构造方法进行初始化
    		super(name);
    		this.alipay = alipay;
    		this.random = new Random(seed);
    	}
    	
    	public void run(){
    		try{
    			while(true){
    				Thread.sleep(random.nextInt(1000));	//随机休眠
    				String flowerID = "交易流水账号" + nextId();
    				alipay.storage(flowerID);		//存入支付宝中				
    			}
    		}catch(Exception e){	//捕获异常		
    		}		
    	}
    	
    	private static synchronized int nextId(){
    		return id++;
    	}
    }
    
    class Seller extends  Thread{ // 卖家线程类
    	
    	private final Random random;
    	private final Alipay alipay;	//卖家支付宝?
    	public Seller(String name, Alipay alipay, long seed){
    		super(name);
    		this.alipay = alipay;
    		this.random = new Random(seed); // 创建随机对象
    	}
    	public void run() { // 实现Thread类的方法,启动线程
    		try {
    			while (true) {
    				String alipay = this.alipay.outlay();
    				Thread.sleep(random.nextInt(1000));
    			}
    		} catch (Exception e) { // 捕获异常
    			System.out.println("买家支付预付款出错:" + e.getMessage());
    		}
    	}
    }
    

      输出:

    淘宝用户ID=卖家-衣拉客	支付宝支出交易流水账号8
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号9
    淘宝用户ID=买家-小B	支付宝存入交易流水账号11
    淘宝用户ID=卖家-衣拉客	支付宝支出交易流水账号11
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号10
    淘宝用户ID=买家-小B	支付宝存入交易流水账号12
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号12
    淘宝用户ID=买家-小B	支付宝存入交易流水账号13
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号13
    淘宝用户ID=买家-小A	支付宝存入交易流水账号14
    淘宝用户ID=卖家-衣拉客	支付宝支出交易流水账号14
    淘宝用户ID=买家-小A	支付宝存入交易流水账号15
    淘宝用户ID=买家-小B	支付宝存入交易流水账号16
    淘宝用户ID=卖家-衣拉客	支付宝支出交易流水账号15
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号16
    淘宝用户ID=买家-小A	支付宝存入交易流水账号17
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号17
    淘宝用户ID=买家-小B	支付宝存入交易流水账号18
    淘宝用户ID=卖家-衣拉客	支付宝支出交易流水账号18
    淘宝用户ID=买家-小A	支付宝存入交易流水账号19
    淘宝用户ID=买家-小A	支付宝存入交易流水账号20
    淘宝用户ID=卖家-衣拉客	支付宝支出交易流水账号19
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号20
    淘宝用户ID=买家-小A	支付宝存入交易流水账号21
    淘宝用户ID=买家-小A	支付宝存入交易流水账号22
    淘宝用户ID=买家-小B	支付宝存入交易流水账号23
    淘宝用户ID=买家-小A	支付宝存入交易流水账号24
    淘宝用户ID=卖家-衣拉客	支付宝支出交易流水账号21
    淘宝用户ID=卖家-衣院	支付宝支出交易流水账号22
    

      

  • 相关阅读:
    C语言I博客作业04
    C语言I博客作业02
    The First Assignment
    蒟蒻的长链剖分学习笔记(例题:HOTEL加强版、重建计划)
    分治FFT模板
    [Ynoi2016]掉进兔子洞 题解
    蒟蒻首开博客园博客QwQ
    bzoj4320 homework 题解
    [ZJOI2016]小星星(容斥+dp)
    【scoi2009】围豆豆(最短路模型)
  • 原文地址:https://www.cnblogs.com/firecode/p/2474617.html
Copyright © 2011-2022 走看看