多執行緒生產者消費者模式實現一對一交替列印
阿新 • • 發佈:2019-01-25
實現生產者/消費者模式:一對一交替列印
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();
}
}