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
     

  • 相关阅读:
    SharePoint 2010 网站备份还原简单介绍
    SharePoint 2010 常用技巧及方法总结
    Javascript 中的window.parent ,window.top,window.self 详解
    SharePoint2013 此产品的试用期已结束
    SharePoint 2013 showModalDialog 弹出模式窗口
    SharePoint文档库,如何在新窗口打开中的文件
    sharepoint2013- Office web app server2013详细的安装和部署
    SharePoint 2013 入门教程之入门手册
    SharePoint 解决打开浏览器自动登录
    解决IIS进程回收后第一次访问慢的问题
  • 原文地址:https://www.cnblogs.com/hcfalan/p/1965945.html
Copyright © 2011-2022 走看看