Java Threading - Consumer&Producer

import  java.util.Vector;

class  Test {

    
private  Vector < String >  mCache  =   new  Vector < String > ();

    
static   class  Consumer  implements  Runnable {
        
private  Test mTestRef;
        Consumer(Test t) {
            mTestRef 
=  t;
        }

        
public   void  run() {
            
try  {
                
for  (; ;) {
                    
synchronized  (mTestRef) {
                        
if  (mTestRef.mCache.size()  >   0 ) {
                            String item 
=  mTestRef.mCache.get( 0 );
                            mTestRef.mCache.remove(
0 );
                            System.out.println(
" Consume the item:  "   +  item);
                        } 
else  {
                            mTestRef.wait();
                        }
                    }
                }
            }
            
catch  (InterruptedException ex) {
            }
        }
    }

    
static   class  Producer  implements  Runnable {
        
private  Test mTestRef;
        
private  String mProducerId;
        Producer(String id, Test t) {
            mProducerId 
=  id;
            mTestRef 
=  t;
        }

        
public   void  run() {
            
try  {
                
int  i  =   0 ;
                
while  (( ++ i) < 5 ) {
                    
synchronized  (mTestRef) {
                        String item 
=  mProducerId  +   "  # "   +  i;
                        mTestRef.mCache.add(item);
                        mTestRef.notify();
                    }
                    Thread.sleep(
1000 );
                }
            }
            
catch  (InterruptedException ex) {
            }
        }
    }

        
    
public   static   void  main(String[] args) {
        Test test 
=   new  Test();
        Thread consumer 
=   new  Thread( new  Consumer(test));
        Thread producer1 
=   new  Thread( new  Producer( " p1 " , test));
        Thread producer2 
=   new  Thread( new  Producer( " p2 " , test));

        producer1.start();
        producer2.start();
        consumer.start();

        
try  {
            Thread.sleep(
15000 );
            producer1.interrupt();
            producer2.interrupt();
            consumer.interrupt();

            producer1.join();
            producer2.join();
            consumer.join();
        }
        
catch  (Exception e) {
            System.out.println(
" exception:  "   +  e.getMessage());        
        }
    }
            
}
 

 

output is:

Consume the item: p1 #1
Consume the item: p2 #1
Consume the item: p1 #2
Consume the item: p2 #2
Consume the item: p1 #3
Consume the item: p2 #3
Consume the item: p1 #4
Consume the item: p2 #4
 

你可能感兴趣的:(reading)