Pihtija

Vezba 4 samostalni

Nov 15th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. Hotel
  2. -----------
  3. package hotel;
  4.  
  5. import java.util.Random;
  6.  
  7. public class Ulaz extends Thread {
  8. private Hotel h;
  9. private volatile boolean kraj = false;
  10.  
  11. public Ulaz(Hotel h) {
  12. this.h = h;
  13. }
  14.  
  15. public void smestiUHotel() {
  16. Random r = new Random();
  17. int vb = r.nextInt(8) + 1;
  18. Musterija m = new Musterija(vb);
  19. h.smesti(m);
  20. }
  21.  
  22. public void run() {
  23. Random r = new Random();
  24. try {
  25. while (!kraj) {
  26. int interval = r.nextInt(1000) + 500;
  27. smestiUHotel();
  28. Thread.sleep(interval);
  29. }
  30. System.err.println("Simulacija hotela je završena. Nit Ulaz je ugašena!");
  31. }catch (InterruptedException e) { System.err.println("Nit Ulaz je pukla"); }
  32. }
  33.  
  34. public void shutdown() {
  35. kraj = true;
  36. }
  37. }
  38. -------------------
  39. Musterija
  40. ---------------------
  41. package hotel;
  42.  
  43. public class Musterija {
  44. private int vremeBoravka;
  45. private static int uniqueid = 0;
  46. private int id;
  47.  
  48. public Musterija(int vremeBoravka) {
  49. this.vremeBoravka = vremeBoravka;
  50. id = ++uniqueid;
  51. }
  52.  
  53. public int getVremeBoravka() { return vremeBoravka; }
  54. public void smanjiDan() { vremeBoravka--; }
  55.  
  56. public String toString() { return "[Musterija " + id + " / b:" + vremeBoravka + "]"; }
  57. }
  58. -----------------
  59. Hotel
  60. ------------------
  61. package hotel;
  62.  
  63. public class Hotel extends Thread {
  64. private Musterija[] sobe;
  65. private int stanje = 0;
  66. private volatile boolean kraj = false;
  67.  
  68. public Hotel(int kapacitet) {
  69. sobe = new Musterija[kapacitet];
  70. }
  71.  
  72. public synchronized void smesti(Musterija m) {
  73.  
  74. for(int i = 0; i < sobe.length; i++) {
  75. if(sobe[i] == null) {
  76. sobe[i] = m;
  77. stanje++;
  78. System.out.println(m + "je smešten u sobu " + i + ". Kapacitet: " + stanje + "/" + sobe.length );
  79. return;
  80. }
  81. }
  82. System.err.println("Kapacitet hotela je popunjen");
  83. notifyAll();
  84. }
  85.  
  86. public synchronized void izbaci() {
  87. for(int i = 0; i < sobe.length; i++) {
  88. if(sobe[i] != null && sobe[i].getVremeBoravka() == 0) {
  89. stanje--;
  90. System.out.println(sobe[i] + " je napustio hotel. Stanje je: " + stanje + "/" + sobe.length);
  91. sobe[i] = null;
  92. } else if(sobe[i] != null) {
  93. sobe[i].smanjiDan();
  94. System.out.println("Prošao je dan za mušteriju." + sobe[i]);
  95. }
  96. }
  97. notifyAll();
  98. }
  99.  
  100. public void run() {
  101. try {
  102. while (!kraj) {
  103. izbaci();
  104. Thread.sleep(1000);
  105. }
  106.  
  107. System.err.println("Simulacija hotela je završena. Nit hotel je ugašena!");
  108.  
  109. }catch (InterruptedException e) {
  110. System.err.println("Nit hotela je pukla!");
  111. }
  112. }
  113.  
  114. public void shutdown() {
  115. kraj = true;
  116. }
  117. }
  118. ------------------------
  119. Main
  120. ------------------------
  121. package program;
  122. import hotel.*;
  123.  
  124. import java.util.Scanner;
  125.  
  126. public class Program {
  127. public static void main(String[] args) {
  128. System.out.println("Pritisnite taster ENTER za kraj programa! Program počinje za 5 sekundi");
  129. try {
  130. Thread.sleep(5000);
  131. } catch (InterruptedException e) {
  132. e.printStackTrace();
  133. }
  134. Hotel h = new Hotel(5);
  135. h.start();
  136. Ulaz u = new Ulaz(h);
  137. u.start();
  138.  
  139. Scanner s = new Scanner(System.in);
  140. s.nextLine();
  141. h.shutdown();
  142. u.shutdown();
  143. }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment