1. 程式人生 > >多執行緒生產者消費者模式實現一對一交替列印

多執行緒生產者消費者模式實現一對一交替列印

實現生產者/消費者模式:一對一交替列印

public class MyService {  
    private ReentrantLock lock= new ReentrantLock();  
    private Condition condition = lock.newCondition();  
    private boolean hasValue = false;  

    public void set() {  
        try{  
            lock.lock();  
            while (hasValue == true)
{ condition.await(); } System.out.println("----"); hasValue = true; condition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public
void get() { try { lock.lock(); while (hasValue == false) { condition.await(); } System.out.println("****"); hasValue = false; condition.signal(); } catch (InterruptedException e)
{ e.printStackTrace(); } finally { lock.unlock(); } } } //兩個執行緒 public class MyThread1 extends Thread { private MyService service; public MyThread1(MyService service) { this.service = service; } @Override public void run() { for (int i=0; i<100; i++) { service.set(); } } } public class MyThread2 extends Thread{ private MyService service; public MyThread2(MyService service) { this.service = service; } @Override public void run() { for (int i=0; i<100; i++) { service.get(); } } } public class Run { public static void main(String[] args) throws InterruptedException { MyService service = new MyService(); MyThread1 a = new MyThread1(service); a.start(); MyThread2 b = new MyThread2(service); b.start(); } }