¹q¨®Ô«È°ÝÃD
§@ªÌ¡J§H¦W | ¨Ó·½¡Jºôµ¸ | ²K¥[®É¶¡¡J2006-02-28 22:57:35 | ¤H®ð¡J1328
¹q¨®Ô«È°ÝÃD
³oÓ°ÝÃD®É¦b§Ú¼g¤@Ó¦C¶¤ºâªk®É°¸º¸·Q¨ìªº¡A
ı±o¦³½ì¡A´N®³¥X¬Ýª±ª±¡A
ºâªkªº¬G¨Æ´yz¦p¤U¡J
¦³¨âÓ¹q¨®¥q¾÷¡AA¬OӦѦn¤H¡AB¬OÓ¤u§@¨g¡A
A¥q¾÷¦b¹q¨®¨ì¯¸Ô«Èªº®ÉÔ¡A¨C¦¸µ¥«Ý5¬í¡A¦pªG5¬í¤º¦³¤H¤W¨®¡A
¨º»òÄ~Äò«·sµ¥«Ý5¬í¡A
ª¾¹D5¬í¤º¨S¦³¼«È¦A¦¸¤W¨®©ÎªÌ¨®¤W¼«È¼Æ¶q¤wº¡¡A¤~¶}¨®¡A
B¥q¾÷¦b¹q¨®¨ì¯¸Ô«Èªº®ÉÔ¡A«ÜÁ¿®Ä²v¡A¨C¦¸Á`¦@µ¥«Ý50¬í¡A
50¬í¤º¼«ÈºÉ¶q¤W¨®¡A®É¶¡¤@¨ì©ÎªÌ¨®¤W¼«È¤wº¡´N¶}¨®¡C
¤_¬O¦³¤F³oÓ¥N½X¡J
A bus driver
import java.util.ArrayList;
import java.util.List;
/**
* @author wwei
* @version $Id
* @since 2006-1-10
*/
public class BusA
{
€€ €€private List passengersPool = new ArrayList();
€€ €€private final int CARRYING_CAPACITY = 60;
€€ €€boolean newPassenger = false;
€€ €€private final int WAIT_TIME = 5000;
€€ €€public void goUp(Passenger passenger)
€€ €€{
€€ €€ €€ €€List passengers;
€€ €€ €€ €€newPassenger = true;
€€ €€ €€ €€//¦³·s¨Óªº¼«È
€€ €€ €€ €€this.notifyAll();
€€ €€ €€ €€synchronized (this) {
€€ €€ €€ €€ €€ €€passengersPool.add(passenger);
€€ €€ €€ €€ €€ €€passengers = passengersPool;
€€ €€ €€ €€ €€ €€if (CARRYING_CAPACITY <= passengers.size()) {
€€ €€ €€ €€ €€ €€ €€ €€busStartup(passengers);
€€ €€ €€ €€ €€ €€ €€ €€newPassenger = false;
€€ €€ €€ €€ €€ €€ €€ €€passengersPool.clear();
€€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€else {
€€ €€ €€ €€ €€ €€ €€ €€try {
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€newPassenger = false;//¼«È¤W¨®§¤¤U¤F
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€this.wait(WAIT_TIME);
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€if (!newPassenger) {
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€//µ¥¤U¤@Ó¼«È¤W¨®ªº®É¶¡¨ì¤F¡Aµo²{¨S¦³·sªº¼«È
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€busStartup(passengers);
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€newPassenger = false;
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€ €€passengersPool.clear();
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€ €€ €€catch (InterruptedException e) {
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€e.printStackTrace();
€€ €€ €€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€ €€ €€finally{
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€passengersPool.clear();
€€ €€ €€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€}
€€ €€ €€ €€}
€€ €€}
€€ €€private void busStartup(List passengers)
€€ €€{
€€ €€ €€ €€//¶}¨®«£¡ã
€€ €€}
}
B bus driver
import java.util.List;
import java.util.ArrayList;
/**
* @author wwei
* @version $Id
* @since 2006-1-10
*/
public class Bus2
{
€€ €€private List passengersPool = new ArrayList();
€€ €€private final int CARRYING_CAPACITY = 60;
€€ €€boolean firstPassenger = true;
€€ €€private final int WAIT_TIME = 50000;
€€ €€public void goUp(Passenger passenger)
€€ €€{
€€ €€ €€ €€List passengers;
€€ €€ €€ €€synchronized(this){
€€ €€ €€ €€ €€ €€passengersPool.add(passenger);
€€ €€ €€ €€ €€ €€passengers = passengersPool;
€€ €€ €€ €€ €€ €€//²Ä¤@Ó¼«È¤W¨®¶}©lp®É
€€ €€ €€ €€ €€ €€if(firstPassenger){
€€ €€ €€ €€ €€ €€ €€ €€try {
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€firstPassenger = false;
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€this.wait(WAIT_TIME);
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€firstPassenger = true;
€€ €€ €€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€ €€ €€catch (InterruptedException e) {
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€e.printStackTrace();
€€ €€ €€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€ €€ €€finally {
€€ €€ €€ €€ €€ €€ €€ €€ €€ €€passengersPool.clear();
€€ €€ €€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€}
€€ €€ €€ €€ €€ €€else if(CARRYING_CAPACITY <= passengersPool.size()){
€€ €€ €€ €€ €€ €€ €€ €€//¤Hº¡¨«¤H¡ã
€€ €€ €€ €€ €€ €€ €€ €€this.notifyAll();
€€ €€ €€ €€ €€ €€}
€€ €€ €€ €€}
€€ €€ €€ €€if(firstPassenger){
€€ €€ €€ €€ €€ €€busStartup(passengers);
€€ €€ €€ €€}
€€ €€}
€€ €€private void busStartup(List passengers)
€€ €€{
€€ €€ €€ €€//¶}¨®«£¡ã
€€ €€}
}
¨âÓºâªk®Ä²v·íµM¦U¦³©Òªø¡A
¦pªG¤j³W¼Òªº¤H¤@¤Ñ¨ì±ß³ò°ô¦bÔ¨®¥xªº¦a¤è¡A
B¥q¾÷·íµM²n¬n¬n¤F¡A¤W¨®¨«¤H¡A¤@®ð¨þ¦¨¡A
·í³oÓÔ¨®¥xªº¼«È®É¦h®É¤Öªº®ÉÔ¡A
¨º»ò¡AA¥q¾÷±q¨Ó¤£·|»~¨Æ¡ã¨þ¨þ
³d¥ô½s¿è¡J¥V¤Ñ¨Ó¤F