生产者、消费者线程模型 java版

来源:互联网 发布:java hashset 源码 编辑:程序博客网 时间:2024/06/10 01:14
package Exam.com;class bufferClass{int[] buffer;int product;public bufferClass(){buffer = new int [10];product = -1;for(int i = 0; i < buffer.length; i++){buffer[i] = -1;}}public boolean isFull(){for(int i = 0; i < buffer.length; i++ ){if(buffer[i] == -1){return false;}}return true;}public boolean isEmpty(){for(int i = 0; i < buffer.length; i++ ){if(buffer[i] != -1){return false;}}return true;}private void save(int product){for(int i = 0; i < buffer.length; i++ ){if(buffer[i] == -1){buffer[i] = product;return;}}}public void getProduct(){for(int i = 0; i < buffer.length; i++ ){if(buffer[i] != -1){ this.product = buffer[i]; buffer[i] = -1; return ;}}}public int retProduct(){return product;}public void addTo(int product){if(!isFull()){save(product);System.out.println("保存");return;}System.out.println("缓冲区已满");}private String getName(){return  "bufferClass";}public void lookBuffer(){for(int i = 0; i < buffer.length; i++){System.out.print(buffer[i] + " ");}System.out.println();}}class Consumer extends Thread{int product;bufferClass buf;public void Consume(){product = -1;}public void contactWith(bufferClass buf){this.buf = buf;}public boolean recevie(){if(!buf.isEmpty()){buf.getProduct();product = buf.retProduct();return true;}return false;}public void run(){System.out.println(this.getName()+ " start");  for(;;){ try{ if(recevie()){ System.out.println("从buf已取得产品"); } else  System.out.println("buf为空"); sleep(3000); }catch(Exception e){} }}}class Producer extends Thread{int product;bufferClass buf;public Producer(){product = -1;}public void produce(){product = 1;}private int getProduct(){return product;}private void reSet(){product = -1;}public void contactWith(bufferClass buf){this.buf = buf;}public boolean putInto(){produce();if(!buf.isFull()){buf.addTo(getProduct());reSet();return true;}return false;}public void run(){System.out.println(this.getName()+ " start"); for(;;){ try{ if(putInto()){ System.out.println("已将产品送进buf");  } else  System.out.println("buf已满"); sleep(2000); }catch(Exception e){} }}}public class TwoThread {static public void main(String args[]){Consumer con = new Consumer();Producer pro = new Producer();bufferClass buf = new bufferClass();con.contactWith(buf);pro.contactWith(buf);con.start();pro.start();}}