Java 多線程模擬生產者和消費者

1.首先是資源類

/**
 * 資源類
 */
public class Res {

	private String userName;
	private String sex;
	// true 生產者等待,消費者消費
	private Boolean flag = true;

    ....
    get/set方法
    ....
    
}

2.生產者類

/*
 * 生產者類
 */
public class Product extends Thread {
	Res res;
	Boolean flag = false;
	public Product(Res res) {
		this.res = res;
	}
	@Override
	public void run() {
		int count = 0;
		while (true) {
			synchronized (res) {
				if (res.getFlag()) {
					try {
						res.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				if (count == 0) {
					res.setUserName("小明");
					res.setSex("男");
				} else {
					res.setUserName("小紅");
					res.setSex("女");
				}
				// 偶數顯示小明,男;奇數顯示小紅,女
				count = (count + 1) % 2;
				res.setFlag(true);
                // 喚醒線程
				res.notify();
			}
		}
	}
}

3.消費者類

/**
 * 消費者類
 */
public class Consumer extends Thread {
	Res res;
	public Consumer(Res res) {
		this.res = res;
	}
	@Override
	public void run() {
		while (true) {
			synchronized (res) {
				if (res.getFlag()) {
					System.out.println(res.getUserName() + "," + res.getSex());
					res.setFlag(false);
					res.notify();
				}
			}
		}
	}
}

4.測試類

    public static void main(String[] args) {
		Res res = new Res();
		Product product = new Product(res);
		Consumer consumer = new Consumer(res);

		product.start();
		consumer.start();
	}

這裏需要主要的是鎖對象使用的是res。他倆公共的資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章