zoukankan      html  css  js  c++  java
  • 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
     

  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/hcfalan/p/1965945.html
Copyright © 2011-2022 走看看