import java.util.HashSet;import java.util.Iterator;import java.util.LinkedList;import java.util.Queue;import java.util.Set;
public class MemberMain {
// 作为缓冲区存放对象 private Set setMember = new HashSet();
// private Boolean isWriter = true; // private Integer []i = new Integer[3];//{1,2,3,4,5,6,7,8,9}; // i = {1,2,3,4,5,6,7,8,9}; private int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub
// m.operateXml(); MemberMain m = new MemberMain(); Product p = new Product(); Custom c = new Custom(); // 运行写线程;0-9写到一个容器中,最多放5个; new Thread(p).start(); // 运行读线程;a/b依次取出数据; new Thread(c).start();
}
public int[] getArr() { return arr; }
}
// 生产者class Product implements Runnable { MemberMain m = new MemberMain(); int[] arr = m.getArr(); Que q = new Que();
public void run() { //for (int i = 0; i < arr.length; i++) { System.out.println("i = 000" ); q.setQue(); }}
// 消费者class Custom implements Runnable { Que q = new Que(); MemberMain m = new MemberMain(); int[] arr = m.getArr();
// a公司和b公司读 public void run() { // TODO Auto-generated method stub //for (int i = 0; i < arr.length; i++) { System.out.println("j = 111"); q.getQue();
//}
}
}
// ,一个线程将排好序的数据存放在队列里;另一个线程读数据,/* * 队列 一个线程将排好序的数据存放在队列里,最多5个; 另一个线程让A/B交替从队列里读数据, */class Que { LinkedList<Integer> q = new LinkedList<Integer>(); Boolean isFull = false; Boolean isEmpty = false; Boolean isA = true; MemberMain m = new MemberMain(); int[] arr = m.getArr();
public synchronized void setQue() {
for (int i = 0; i < arr.length; i++) { System.out.println("jjj =" + i); q.add(arr[i]); if (q.size() > 5) { notify(); } } System.out.println("q =" + q);
}
public synchronized void getQue() { if(q.isEmpty()){ notify(); } if (isA) { System.out.println("a =" + (Integer) q.peek()); isA = false; } else { System.out.println("b =" + (Integer) q.peek()); isA = true; }
}
}
