public class Shot {
public static void main(String args[]) {
Chamber chamber = new Chamber();
Add add = new Add(chamber);
Launch launch = new Launch(chamber);
add.start();
launch.start();
}
}class Chamber {
private int num = 0;
private boolean empty = true; public synchronized void put(int num) {
while (!empty) {
try {
System.out.println("正在打枪,请等待...");
wait();
} catch (InterruptedException ioe) {
ioe.printStackTrace();
}
}
this.num = num; empty = false;
notify();
} public synchronized int get() {
int tmp;
while (empty) { try {
System.out.println("还未上子弹,请等待...");
wait();
} catch (InterruptedException e) { e.printStackTrace();
}
} num--;
        empty = true;
tmp = num;
notify();
return tmp;
}}class Add extends Thread {
private Chamber chamber; public Add(Chamber chamber) {
this.chamber = chamber;
} public void run() {
int i;
for (i = 0; i < 12; i++)
chamber.put(i);
System.out.println("增加第" + i + "子弹");
try {
Thread.sleep((int) (Math.random() * 301));
} catch (InterruptedException ie) {
ie.printStackTrace();
} }
}class Launch extends Thread {
private Chamber chamber; public Launch(Chamber chamber) {
this.chamber = chamber;
} public void run() {
if (chamber.get() >= 0) {
int i;
for (i = 0; i < 12; i++) {
System.out.println("发射" + i + "子弹");
try {
Thread.sleep((int) (Math.random() * 301)); } catch (InterruptedException e) { e.printStackTrace();
}
} }
}
}

解决方案 »

  1.   

    package co.test.cf;public class Shot { 
    public static void main(String args[]) { 
    Chamber chamber = new Chamber(); 
    Add add = new Add(chamber); 
    Launch launch = new Launch(chamber); 
    add.start(); 
    launch.start(); 

    } class Chamber { 
    private int num = 0; 
    private boolean empty = true; public synchronized void put(int num) { 
    while (!empty) { 
    try { 
    System.out.println("正在打枪,请等待..."); 
    wait(); 
    } catch (InterruptedException ioe) { 
    ioe.printStackTrace(); 


    this.num = num; empty = false; 
    notify(); 
    } public synchronized int get() { 
    int tmp; 
    while (empty) { try { 
    System.out.println("还未上子弹,请等待..."); 
    wait(); 
    } catch (InterruptedException e) { e.printStackTrace(); 

    } num--; 
            empty = true; 
    tmp = num; 
    notify(); 
    return tmp; 
    } } class Add extends Thread { 
    private Chamber chamber; public Add(Chamber chamber) { 
    this.chamber = chamber; 
    } public void run() { 
    int i; 
    for (i = 1; i < 12; i++) {
    chamber.put(i); 
    System.out.println("增加第" + i + "子弹"); 
    }
    try { 
    Thread.sleep((int) (Math.random() * 301)); 
    } catch (InterruptedException ie) { 
    ie.printStackTrace(); 
    } } 
    } class Launch extends Thread { 
    private Chamber chamber; public Launch(Chamber chamber) { 
    this.chamber = chamber; 
    } public void run() { 
    if (chamber.get() >= 0) { 
    int i; 
    for (i = 0; i < 12; i++) { 
    System.out.println("发射" + i + "子弹"); 
    try { 
    Thread.sleep((int) (Math.random() * 301)); } catch (InterruptedException e) { e.printStackTrace(); 

    } }