java 用condition&reentrylock实现生产者消费者

package com.lb;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public class test {
	private ReentrantLock lock;
	private Condition create = null;
	private Condition print = null;
	private volatile String num = "";
	private boolean flag = true;

	public static void main(String[] args) {

		new test().test2();

	}

	public test() {
		lock = new ReentrantLock();
		create = lock.newCondition();
		print = lock.newCondition();
	}

	public void test2() {
		Thread conThread = new Thread(new consumer());
		Thread creThread = new Thread(new productor());
		conThread.start();
		creThread.start();
	}

	class productor implements Runnable {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			while (flag) {
				lock.lock();
				if (num.equals("")) {
					String value = String.valueOf(((int) (Math.random() * 10) % 6) + 1);
					System.out.println("create value is " + value);
					num = value;
					print.signalAll();
					lock.unlock();
				} else {
					try {
						create.await();
						lock.unlock();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}

	}

	class consumer implements Runnable {
		@Override
		public void run() {

			// TODO Auto-generated method stub
			while (flag) {
				lock.lock();
				if (!num.equals("")) {
					System.out.println("consumer " + num);
					num = "";
					create.signalAll();
					lock.unlock();
				} else {
					try {
						print.await();
						lock.unlock();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}

				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}
}

  

posted @ 2019-05-12 01:42  ForMeDream  阅读(415)  评论(0编辑  收藏  举报