java.util.concurrent.locks.Condition简单示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Qgwperfect/article/details/88878525