//Java Thread producer customer class ThreadTest { public static void main(String[] args) { Q q=new Q(); Producer p=new Producer(q); Customer c=new Customer(q); Thread t0=new Thread(p); Thread t1=new Thread(c); t0.start(); t1.start(); for(int i=0;i<50;i++) { if(i==25) { p.stop(); c.stop(); } System.out.println(Thread.currentThread().getName()); } } } class Q { String name="empty"; String gender="empty"; boolean isEmpty=true; public synchronized void Put(String name,String gender) { if (!isEmpty) { try {wait();} catch (Exception ex) {} } this.name = name; try {Thread.sleep(1);} catch (Exception ex) {} this.gender = gender; isEmpty = false; notify(); } public synchronized void Get() { if(isEmpty) { try{wait();}catch(Exception ex){} } System.out.println("name:"+this.name+"__gender:"+this.gender); isEmpty=true; notify(); } } class Producer implements Runnable { Q q; boolean isStop=false; public void stop() { this.isStop=true; } public Producer(Q q) { this.q=q; } public void run() { int i = 0; while (!isStop) { if (i == 0) { q.Put("Tim", "male"); } else { q.Put("Lian", "female"); } i = (i + 1) % 2; } } } class Customer implements Runnable { Q q; boolean isStop=false; public void stop() { this.isStop=true; } public Customer(Q q) { this.q=q; } public void run() { while(!isStop) { q.Get(); } } }