import java.util.*;
/*
  题目:一个线程与另一线程交替打印100个数,第一个线程打印1~10,第二个打印11~20,以此类推
  思路:生产者消费者的变形,可把10个数存到List中,用get方法从List中得到的数,然后再加10
*/
public class ThreadTest{
public static void main(String[] args){
Queue q=new Queue();
Producer p=new Producer(q);
Consumer c=new Consumer(q);
p.start();
c.start();
}
}
class Producer extends Thread{
     private Queue q;
List<Integer> list=null;
public Producer(Queue q){
this.q=q;
}
public void run(){
         for(int i=0;i<5;i++){
             list=new ArrayList<Integer>();
for (int j=(2*i*10+1);j<=2*i*10+10;j++){
list.add(j);
System.out.print(j+" ");
}
 
q.put(list);
System.out.println();
}
}
}
class Consumer extends Thread{
private Queue q;
List<Integer> list;
public Consumer(Queue q){
this.q=q;
}
public void run(){
while(true){
q.get();
}
}
}
class Queue{
private List list ;
boolean bFull=false;
public synchronized void put(List<Integer> list){
        if(!bFull){
            this.list=list;
            bFull=true;
notify();
}
try{
wait();
}catch(Exception e){
e.printStackTrace();
}
}
public synchronized void get(){
if(!bFull){
try{
wait();
}catch(Exception e){
e.printStackTrace();
}
}
System.out.println();
for(int i=0;i<list.size();i++){
  // System.out.println();
   int m=(Integer)(list.get(i));
                System.out.print((m+10)+" ");
}
bFull=false;
notify();
        
}
}