码迷,mamicode.com
首页 > 其他好文 > 详细

生产消费

时间:2017-02-03 20:42:51      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:线程   stat   imp   tar   oid   static   --   ++   this   

 

线程同步

 

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();
	}
}

 

生产消费

标签:线程   stat   imp   tar   oid   static   --   ++   this   

原文地址:http://www.cnblogs.com/denggelin/p/6363361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!