public class OODemol002 {
public static void main(String[] args) { Container c = new Container();
Thread t1 = new Thread(new Laundryman(
c, 1));
Thread t2 = new Thread(new Laundryman(c, 2)); Thread t3 = new Thread(new WashingWorker(c, 1)); Thread t4 = new Thread(new WashingWorker(c, 2)); t1.start(); t2.start(); t3.start(); t4.start(); } }
class Clothes { int in;
public Clothes(int index) { this.in = index; } }
class Container {
Clothes[] clothes = new Clothes[6]; int index = 0;
public synchronized void push(Clothes c) { while (index == clothes.length) { try {
this.wait();
} catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
this.notify();
clothes[index] = c; index++; }
public synchronized Clothes pop() { while (index == 0) { try {
this.wait();
} catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
this.notify(); index--;
return clothes[index]; } } /**
* 编写程序,使用多线程模拟实现洗衣房工作的示例。条件如下: 1. 洗衣工2人(对应2个线程) 2. 晾衣工2人 3. 共50件衣服 4. * 洗衣工每2秒洗1件衣服 5. 晾衣工每1秒晾1件衣服 **/
class Laundryman implements Runnable { Container container; int id;
public Laundryman(Container container, int id) { // TODO Auto-generated method stub this.container = container; this.id = id; }
public void run() {
// TODO Auto-generated method stub Clothes c = null; try {
for (int i = 0; i < 25; i++) { Thread.sleep(2000); c = new Clothes(i);
System.out.println("洗衣工" + id + "洗了衣服:" + c.in); container.push(c); }
} catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();
} } }
class WashingWorker implements Runnable { Container container; int id;
public WashingWorker(Container container, int id) { this.container = container; this.id = id; }
public void run() {
// TODO Auto-generated method stub for (int i = 0; i < 25; i++) { Clothes c = container.pop();
System.out.println("晾衣工" + id + "晾了衣服:" + c.in); try {
Thread.sleep(1000);
} catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }