• 实例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
    

      

  • 相关阅读:
    【Linux学习三】Linux系统目录架构
    【Linux学习二】Linux文件系统
    【Python网络爬虫四】通过关键字爬取多张百度图片的图片
    【GitHub】命令行操作
    【Linux学习一】命令行CLI、BASH的基本操作
    从CK+库提取标记点信息
    【Python网络爬虫三】 爬取网页新闻
    Windows命令行下pip安装python whl包
    【GitHub Desktop】MacOS和Win下配置及简单的使用
    【Python文件处理】递归批处理文件夹子目录内所有txt数据
  • 原文地址:https://www.cnblogs.com/firecode/p/2474617.html
Copyright © 2020-2023  润新知