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