Java tutorial
/* * Output: * * Got: 0 * Got: 0 * Got: 0 * ... */ class Queue { int n; synchronized int get() { System.out.println("Got: " + n); return n; } synchronized void put(int n) { this.n = n; System.out.println("Put: " + n); } } class Consumer implements Runnable { Queue q; Consumer(Queue q) { this.q = q; new Thread(this, "Consumer").start(); } public void run() { while (true) { q.get(); } } } public class MainClass { public static void main(String args[]) { Queue q = new Queue(); new Consumer(q); } }