一个单机版本的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

猜你喜欢

转载自babyduncan.iteye.com/blog/1902850
今日推荐