Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. /*
  2. Implementare la classe Elevator , che simula il comportamento di un ascensore.
  3. Il costruttore prende come argomento il numero di piani serviti (oltre al pian terreno).
  4. Il metodo call rappresenta la prenotazione (chiamata) di un piano.
  5. Se l’argomento di call è fuori dall’intervallo corretto, viene lanciata un’eccezione.
  6. In un thread indipendente, quando ci sono chiamate in attesa, l’ascensore cambia piano in modo
  7. da soddisfare una delle chiamate, scelta in ordine arbitrario. L’ascensore impiega due secondi
  8. per percorrere ciascun piano e stampa a video dei messaggi esplicativi, come nel seguente caso
  9. d’uso.
  10. */
  11. import java.util.*;
  12. public class Elevator{
  13. private static Set<Integer> calls = new HashSet<Integer>();
  14. private static int piani=0;
  15. private static int pos = 0;
  16. Elevator(int piani){
  17. this.piani = piani;
  18. new Thread(){
  19. public void run(){
  20. TreeSet<Integer> soddisfa = new TreeSet<Integer>();
  21. while(true){
  22. synchronized(calls){
  23. if(calls.size() == 0){
  24. System.out.println("In attesa...");
  25. try{
  26. calls.wait();
  27. }catch(InterruptedException ex){ ex.printStackTrace();}
  28. }
  29. else{
  30. for(Integer i: calls){
  31. if((i>=pos) && (soddisfa.size()==0 || i < soddisfa.last())){
  32. soddisfa.add(i);
  33. }
  34. }
  35. }
  36. }
  37. for(Integer i: soddisfa){
  38. System.out.println("L'ascensore si muove dal piano: "+ pos);
  39. try{
  40. Thread.sleep((i-pos)*2000);
  41. }catch(InterruptedException ex){ ex.printStackTrace();}
  42. System.out.println("L'ascensore si ferma al piano: "+i);
  43. synchronized(calls){
  44. calls.remove(i);
  45. }
  46. soddisfa.remove(i);
  47. pos=i;
  48. }
  49. }
  50. }
  51. }.start();
  52. }
  53.  
  54. private void call(int piano){
  55. if(piano > this.piani){
  56. throw new RuntimeException();
  57. }
  58. synchronized(calls){
  59. calls.add(piano);
  60. calls.notify();
  61. }
  62. }
  63.  
  64. public static void main(String[] args) {
  65. Elevator e = new Elevator(10);
  66. e.call(8);
  67. e.call(5);
  68. e.call(3);
  69. e.call(4);
  70. }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement