首页 > 代码库 > 生产消费

生产消费

 

线程同步

 

class SynStack {
	private char data[] = new char[6];
	private int cnt = 0;// 表示数组有效元素的个数

	public synchronized void push(char ch) {
		while (data.length == cnt) {
			try {
				this.wait();
			} catch (Exception e) {

			}
		}

		this.notify();

		data[cnt] = ch;
		cnt++;
		System.out.println("生产线程正在生产第" + cnt + "个产品,该产品是:" + ch);
	}

	public synchronized char pop() {
		char ch;

		while (0 == cnt) {
			try {
				this.wait();
			} catch (Exception e) {

			}
		}

		this.notify();
		ch = data[cnt - 1];
		System.out.println("消费线程正在消费第" + cnt + "个产品,该产品是:" + ch);

		--cnt;
		return ch;
	}
}

class Producer implements Runnable {
	private SynStack ss = null;

	public Producer(SynStack ss) {
		this.ss = ss;
	}

	public void run() {
		char ch;

		for (int i = 0; i < 26; i++) {
			try {
				Thread.sleep(100);
			} catch (Exception e) {
			}

			ch = (char) (‘a‘ + i);
			ss.push(ch);
		}
	}
}

class Consumer implements Runnable {
	private SynStack ss = null;

	public Consumer(SynStack ss) {
		this.ss = ss;
	}

	public void run() {
		for (int i = 0; i < 26; i++) {
			try {
				Thread.sleep(100);
			} catch (Exception e) {
			}

			ss.pop();
		}
	}
}

public class Test {
	public static void main(String[] args) {
		SynStack ss = new SynStack();
		Producer p = new Producer(ss);
		Consumer c = new Consumer(ss);

		Thread t1 = new Thread(p);
		Thread t2 = new Thread(c);

		t1.start();
		t2.start();
	}
}

 

生产消费