波斯马BOSSMA Information Technology

Java多线程学习(二)

发布时间:2007年10月12日 / 分类:JAVA / 9,087 次浏览 / 评论

这是多线程同步的一个例子:
模拟某种物品的存储与取出,某一时刻只能执行一个线程。

[因为不熟悉多线程同步的应用,总感觉这个例子有点怪,有地方不合适,欢迎各位高手见到后指点一二。]

package cn.bossma.demo.thread;

public class StoreControl {

	public static void main(String args[]) {
		StoreDemo sd = new StoreDemo();

		CustomerDemo cd = new CustomerDemo("1", -30, sd); //取出数量线程
		CustomerDemo pd = new CustomerDemo("2", 30, sd); //存储数量线程
		
		pd.start();
		cd.start();
		

	}
}

class StoreDemo {
	String name;
	public static int productNumber = 0;

	public synchronized void store_in(int addNumber, String n) {
		this.name = n;

		if (addNumber > 0) {
			doNumber(addNumber);
			System.out.println("[Thread:" + getName() + "]放入" + addNumber);

		} else {
			int getABSNumber = Math.abs(addNumber);
			if (productNumber >= getABSNumber) {
				doNumber(addNumber);
				System.out.println("[Thread:" + getName() + "]取出" + getABSNumber);
			} else {
				System.out.println("[Thread:" + getName() + "]数量不足");
			}

		}
		this.notifyAll();
	}

	private void doNumber(int addNumber) {
		productNumber += addNumber;
	}

	public String getName() {
		return name;
	}

}

class CustomerDemo extends Thread {
	private int addNumber;
	StoreDemo sd;

	public CustomerDemo(String id, int newNumber, StoreDemo sde) {
		super(id);
		addNumber = newNumber;
		sd = sde;

	}

	public void run() {
		sd.store_in(addNumber, getName());
	}
}
本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《Java多线程学习(二)

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论