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