java开发实战经典(第二版)P283 9-2

9.2   设计一个生产计算机和搬运计算机类,要求生产出一台电脑就搬走一台,如果没有新的计算机生产出来,则搬运工要等待新计算机产出;如果生产出的计算机没有被搬走,则要等待计算机搬走之后再生产,并统计出生产的计算机数量。

package book;

class Computer {
	private int num = 0;

	public synchronized void SetNum(int num) {
		this.num = this.num + num;
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public synchronized int getNum() {
		return num;
	}
}

class Product implements Runnable {
	private int i = 0;
	private Computer com = null;

	public Product(Computer com) {
		this.com = com;
	}

	public void run() {
		while (true) {
			if (com.getNum() == 0) {
				com.SetNum(1);
				i++;
				System.out.println("生产一台电脑");
				System.out.println("已经生产了" + i + "台电脑。");
			}
		}
	}
}

class Move implements Runnable {
	private Computer com = null;

	public Move(Computer com) {
		this.com = com;
	}

	public void run() {
		while (true) {
			if (com.getNum() >= 1) {
				com.SetNum(-1);
				System.out.println("搬运一台电脑");
			}
		}
	}
}

public class JiOu {
	public static void main(String[] args) {
		Computer com = new Computer();
		Product pro = new Product(com);
		Move move = new Move(com);
		Thread pro1 = new Thread(pro);
		Thread move1 = new Thread(move);
		pro1.start();
		move1.start();
	}
}

运行结果:(部分)

生产一台电脑
已经生产了1台电脑。
搬运一台电脑
生产一台电脑
已经生产了2台电脑。
搬运一台电脑
生产一台电脑
已经生产了3台电脑。
搬运一台电脑
生产一台电脑
已经生产了4台电脑。
搬运一台电脑
生产一台电脑
已经生产了5台电脑。
搬运一台电脑
生产一台电脑
已经生产了6台电脑。
搬运一台电脑
生产一台电脑
已经生产了7台电脑。
搬运一台电脑
生产一台电脑
已经生产了8台电脑。
搬运一台电脑
生产一台电脑
已经生产了9台电脑。
搬运一台电脑
生产一台电脑
已经生产了10台电脑。

 

你可能感兴趣的:(java开发实战经典(第二版))