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;
}
}
}