版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qgwperfect/article/details/88878525
public class ConditionExample {
private final static ReentrantLock lock = new ReentrantLock();
private final static Condition condition = lock.newCondition();
private static int data = 0;
private static volatile boolean flag = true;
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
for(;;) {
produceData();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for(;;) {
consumeData();
}
}
}).start();
}
private static void produceData() {
try {
lock.lock();
while(flag) {
condition.await();
}
data++;
TimeUnit.SECONDS.sleep(1);
System.out.println("produce : " + data);
flag = true;
condition.signal();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
private static void consumeData() {
try {
lock.lock();
while(!flag) {
condition.await();
}
TimeUnit.SECONDS.sleep(1);
System.out.println("consume : " + data);
flag = false;
condition.signal();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}