java信号量生产者_课程设计——利用信号量实现生产者-消费者问题(java)

packagecn.Douzi.ProductConsume;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Scanner;public classProCon {static int LEN = 3;static public int PROTIME = 1500;static public int CONTIME = 1000;static public int totalData = 1000;static public Queue buffer = new LinkedList<>();static public Buffer empty = new Buffer(0, 10);static public Mutex mutex = new Mutex(1);publicProCon() {

}public static voidmain(String[] args) {//TODO Auto-generated method stub

System.out.println("|-----------------------------------------------------------|");

System.out.println("| |");

System.out.println("| Welcome to My System ! |");

System.out.println("| ↖ By Douzi 2017 ↗ |");

System.out.println("| 生产消费开始进行 |");

System.out.println("| |");

System.out.println("|-----------------------------------------------------------|\n");

Scanner scaner= newScanner(System.in);

System.out.println("设置缓冲区大小: ");

LEN=scaner.nextInt();

System.out.println("缓冲区大小: " + LEN + "\n");

System.out.println("设置生产休眠时间: ");

ProCon.PROTIME=scaner.nextInt();

System.out.println("设置消费休眠时间: ");

ProCon.CONTIME=scaner.nextInt();

ProductWindows pro= newProductWindows();

ConsumeWindows con= newConsumeWindows();

Thread t1= newThread(pro);

Thread t2= newThread(con);

t1.start(); t2.start();

}

}class ProductWindows implementsRunnable {publicProductWindows() {

}

@Overridepublic voidrun() {//TODO Auto-generated method stub

while (true) {try{

Thread.sleep(ProCon.PROTIME);

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

ProCon.totalData++;

System.out.println("生产数据:" +ProCon.totalData);if (ProCon.buffer.size()

ProCon.buffer.add(newData(ProCon.totalData));

System.out.println("将数据: " + ProCon.totalData + " 放入缓冲区");

System.out.println("此时缓冲区大小: " + ProCon.buffer.size() + "\n");

}

}else{

System.out.println("缓冲区满,等待数据取出缓冲区.....................\n");

ConsumeWindows con= newConsumeWindows();

Thread t2= newThread(con);

t2.start();break;

}

}

}

}class ConsumeWindows implementsRunnable {

@Overridepublic voidrun() {//TODO Auto-generated method stub//System.out.println("Test");

while (true) {

Data d= new Data(0);try{

Thread.sleep(ProCon.CONTIME);

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}if (ProCon.buffer.size() > 0) {synchronized(ProCon.mutex) {

d=ProCon.buffer.peek(); ProCon.buffer.poll();

System.out.println("从缓冲区取出数据: " +d.getData());

}

}else{

System.out.println("缓冲区空,等待数据放入缓冲区..................\n");

ProductWindows pro= newProductWindows();

Thread t1= newThread(pro);

t1.start();break;

}

System.out.println("消费数据: " + d.getData() + "\n");

}

}

}classData {private intdata;public Data(intdata) {super();this.data =data;

}public intgetData() {returndata;

}

}classMutex {private intmutex;public Mutex(intmutex) {super();this.mutex =mutex;

}

}classBuffer {private intfull;private intempty;public Buffer(int full, intempty) {super();this.full =full;this.empty =empty;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值