package me.ereach; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; public class ThreadDemo { public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(255); Egg egg01 = new Egg(); for (int i = 0; i < 10; i++) { es.execute(new Runnable() { @Override public void run() { egg01.getEgg(); } }); es.execute(new Runnable() { @Override public void run() { egg01.putEgg(); } }); } es.shutdown(); } } class Egg { private int count; public Egg() { this.count = 0; } public synchronized void putEgg() { while (this.count > 0) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.count = 1; System.out.println(this.count + " egg put."); notify(); } public synchronized int getEgg() { while (this.count == 0) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } int egg = this.count; this.count = 0; System.out.println(egg + " egg get."); this.count = 0; notify(); return egg; } }