Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Implementare la classe Elevator , che simula il comportamento di un ascensore.
- Il costruttore prende come argomento il numero di piani serviti (oltre al pian terreno).
- Il metodo call rappresenta la prenotazione (chiamata) di un piano.
- Se l’argomento di call è fuori dall’intervallo corretto, viene lanciata un’eccezione.
- In un thread indipendente, quando ci sono chiamate in attesa, l’ascensore cambia piano in modo
- da soddisfare una delle chiamate, scelta in ordine arbitrario. L’ascensore impiega due secondi
- per percorrere ciascun piano e stampa a video dei messaggi esplicativi, come nel seguente caso
- d’uso.
- */
- import java.util.*;
- public class Elevator{
- private static Set<Integer> calls = new HashSet<Integer>();
- private static int piani=0;
- private static int pos = 0;
- Elevator(int piani){
- this.piani = piani;
- new Thread(){
- public void run(){
- TreeSet<Integer> soddisfa = new TreeSet<Integer>();
- while(true){
- synchronized(calls){
- if(calls.size() == 0){
- System.out.println("In attesa...");
- try{
- calls.wait();
- }catch(InterruptedException ex){ ex.printStackTrace();}
- }
- else{
- for(Integer i: calls){
- if((i>=pos) && (soddisfa.size()==0 || i < soddisfa.last())){
- soddisfa.add(i);
- }
- }
- }
- }
- for(Integer i: soddisfa){
- System.out.println("L'ascensore si muove dal piano: "+ pos);
- try{
- Thread.sleep((i-pos)*2000);
- }catch(InterruptedException ex){ ex.printStackTrace();}
- System.out.println("L'ascensore si ferma al piano: "+i);
- synchronized(calls){
- calls.remove(i);
- }
- soddisfa.remove(i);
- pos=i;
- }
- }
- }
- }.start();
- }
- private void call(int piano){
- if(piano > this.piani){
- throw new RuntimeException();
- }
- synchronized(calls){
- calls.add(piano);
- calls.notify();
- }
- }
- public static void main(String[] args) {
- Elevator e = new Elevator(10);
- e.call(8);
- e.call(5);
- e.call(3);
- e.call(4);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement