UTF.COM.CN

¹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¨Æ´y­z¦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¨®¶}©l­p®É
€€ €€ €€ €€ €€ €€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
ºô¤Íµû½×¡]µû½×¤º®e¥u¥Nªíºô¤ÍÆ[ÂI¡A»P¥»¯¸¥ß³õµLÃö¡I¡^

©m¦W¡J

ÅçÃÒ½X¡J ÂIÀ»¨ê·s