`
BabyDuncan
  • 浏览: 574004 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个单机版本的consumer和producer

阅读更多
package com.sohu.babyduncan;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

/**
 * @author: guohaozhao 
 * @since: 13-7-10 21:41
 */
public class ThreadTest {

    private static final byte[] lock = new byte[0];

    static volatile boolean startProduce = true;
    static volatile boolean startConsume = true;

    private static final List<String> list = new ArrayList<String>();

    private static class Producer implements Runnable {
        @Override
        public void run() {
            while (true) {
                if (!startProduce) {
                    continue;
                }
                synchronized (lock) {
                    String s = System.currentTimeMillis() + "";
                    System.out.println("porduce one " + s);
                    list.add(s);
                    if (list.size() > 10) {
                        startProduce = false;
                        startConsume = true;
                    }
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private static class Consumer implements Runnable {

        @Override
        public void run() {
            while (true) {
                if (!startConsume) {
                    continue;
                }
                synchronized (lock) {
                    System.out.println("consume one " + list.get(0));
                    list.remove(0);
                    if (list.size() == 0) {
                        startProduce = true;
                        startConsume = false;
                    }
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    }


    public static void main(String... args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(1);
        for (int i = 0; i < 10; i++) {
            new Thread(new Producer()).start();
            new Thread(new Consumer()).start();
        }
        countDownLatch.await();
    }

}




运行结果:
porduce one 1373469039014
porduce one 1373469039014
consume one 1373469039014
consume one 1373469039014
porduce one 1373469039014
consume one 1373469039014
porduce one 1373469039014
porduce one 1373469039014
porduce one 1373469039014
consume one 1373469039014
porduce one 1373469039019
porduce one 1373469039053
porduce one 1373469039065
porduce one 1373469039065
porduce one 1373469040034
porduce one 1373469040034
porduce one 1373469040034
porduce one 1373469040038
porduce one 1373469040038
consume one 1373469039014
consume one 1373469039014
consume one 1373469039019
consume one 1373469039053
consume one 1373469039065
consume one 1373469039065
consume one 1373469040034
consume one 1373469040034
consume one 1373469040034
consume one 1373469040038
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics