package cn.learn.test;
public class WaitNotifyTest {
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Count count = new Count(); MyLock myLock = new MyLock(); try { System.out.println("begin::count="+count.getCount()); Thread mythread1 = new Thread(new EatThread(myLock, count),"mythread1"); Thread mythread2 = new Thread(new ProductThread(myLock, count),"mythread2"); mythread1.start(); mythread2.start(); mythread1.join(); mythread2.join(); System.out.println("end::count="+count.getCount()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
}
interface Lock{ public int i=0; public static final String NAME = "";
}
class MyLock implements Lock{ int sum = 0; }
class EatThread implements Runnable { Lock lock; Count count; public EatThread(Lock lock,Count count){ this.lock = lock; this.count = count; }
@Override public void run() { // TODO Auto-generated method stub try { while(true) { synchronized (lock) { if (count.getCount()>0) { System.out.println("eat:"+count.getCount()); count.clear(); lock.notify(); }else { lock.wait(); } } } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
class ProductThread implements Runnable { Lock lock; Count count; public ProductThread(Lock lock,Count count){ this.lock = lock; this.count = count; }
@Override public void run() { // TODO Auto-generated method stub try { while(true) { synchronized (lock) { if (count.getCount()>10) { lock.wait(); }else { count.addCount(); System.out.println("product:"+count.getCount()); lock.notify(); } } } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
class Count{ private int count=0; public void addCount() { count = count + 1; } public int getCount(){ return this.count; } public void clear() { count=0; } }
java多线程实现生产者消费者模式
最新推荐文章于 2023-12-11 09:32:43 发布