Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.61 KB | None | 0 0
  1. //TESTMAIN
  2.  
  3. import java.lang.reflect.Array;
  4. import java.util.*;
  5.  
  6. public class TestMain {
  7. public static void main(String[] args){
  8. int j=0;
  9. Random random= new Random();
  10. Scanner tastiera= new Scanner(System.in);
  11. int b,g,r;
  12. System.out.println("INSERIRE IL NUMERO DI PAZIENTI CON CODICE BIANCO");
  13. b=tastiera.nextInt();
  14. System.out.println("INSERIRE IL NUMERO DI PAZIENTI CON CODICE GIALLO");
  15. g=tastiera.nextInt();
  16. System.out.println("INSERIRE IL NUMERO DI PAZIENTI CON CODICE ROSSO");
  17. r=tastiera.nextInt();
  18. Medico[] medici=new Medico[10];
  19. PriorityQueue<Thread> pazienti=new PriorityQueue<>(g + r, new Comparator<Thread>() {
  20. @Override
  21. public int compare(Thread thread, Thread t1) {
  22. return t1.getPriority()-thread.getPriority();
  23. }
  24. });
  25. ArrayList<Thread> rossi=new ArrayList<>(r);
  26. for(int i=0;i<10;i++){
  27. Medico m=new Medico(i,pazienti,rossi);
  28. medici[i]=m;
  29. }
  30. for(int i=0;i<r;i++) {
  31. int k = random.nextInt(5) + 1;
  32. Paziente p = new Paziente(i, 3, k, -1, medici,pazienti,rossi);
  33. Thread thread = new Thread(p);
  34. thread.setPriority(3);
  35. rossi.add(thread);
  36. thread.start();
  37. }
  38. for(int i=0;i<g;i++){
  39. j=i%10;
  40. int k=random.nextInt(5)+1;
  41. Paziente p = new Paziente(i, 2, k, j,medici,pazienti,rossi);
  42. Thread thread = new Thread(p);
  43. thread.setPriority(2);
  44. pazienti.add(thread);
  45. thread.start();
  46. }
  47. for(int i=0;i<b;i++){
  48. int k=random.nextInt(5)+1;
  49. Paziente p = new Paziente(i, 1, k, random.nextInt(9),medici,pazienti,rossi);
  50. Thread thread = new Thread(p);
  51. thread.setPriority(1);
  52. pazienti.add(thread);
  53. thread.start();
  54. }
  55. }
  56. }
  57.  
  58. //MEDICO
  59.  
  60. import java.awt.image.AreaAveragingScaleFilter;
  61. import java.util.ArrayList;
  62. import java.util.PriorityQueue;
  63. import java.util.concurrent.locks.Condition;
  64. import java.util.concurrent.locks.Lock;
  65. import java.util.concurrent.locks.ReentrantLock;
  66.  
  67. public class Medico {
  68. private int id;
  69. private Lock lockMedico=null;
  70. private Condition isBusy=null;
  71. private PriorityQueue<Thread> pazienti;
  72. private ArrayList<Thread> rossi;
  73. public Medico(int id,PriorityQueue<Thread> pazienti,ArrayList<Thread> rossi){
  74. this.id=id;
  75. lockMedico=new ReentrantLock();
  76. isBusy= lockMedico.newCondition();
  77. this.pazienti=pazienti;
  78. this.rossi=rossi;
  79. }
  80. public void lockTotale(){
  81. lockMedico.lock();
  82. }
  83. public void unlockTotale(){
  84. lockMedico.unlock();
  85. }
  86.  
  87. public void signalTotale(){
  88. isBusy.signal();
  89. }
  90. public void visita(){
  91. if(Thread.currentThread().getPriority()!=3)lockMedico.lock();
  92. try{
  93. try{
  94. while((rossi.size()!=0 && Thread.currentThread().getPriority()==1)){
  95. isBusy.await();
  96. }
  97. while(rossi.size()!=0 && Thread.currentThread().getPriority()==2){
  98. isBusy.await();
  99. }
  100. }
  101. catch(Exception e){
  102. e.printStackTrace();
  103. }
  104. try {
  105. System.out.println("Thread "+ Thread.currentThread().getId()+" di priorità "+Thread.currentThread().getPriority()+" con medico "+id);
  106. Thread.sleep(100);
  107. isBusy.signal();
  108. }
  109. catch(InterruptedException e){
  110. e.printStackTrace();
  111. }
  112. }
  113. finally{
  114. System.out.println("Thread "+ Thread.currentThread().getId()+" con medico FINITA "+id);
  115. if(Thread.currentThread().getPriority()!=3) lockMedico.unlock();
  116. }
  117. }
  118. }
  119.  
  120.  
  121. //PAZIENTE
  122.  
  123. import java.util.*;
  124. import java.util.concurrent.locks.Condition;
  125.  
  126. public class Paziente extends Thread {
  127. private int id;
  128. private int codice;
  129. private int numeroVisite;
  130. private int medico;
  131. private Medico[] queue = null;
  132. private PriorityQueue<Thread> patients = null;
  133. private ArrayList<Thread> rossi=null;
  134. private Condition isBusy;
  135.  
  136. public Paziente(int id, int codice, int numeroVisite, int medico, Medico[] queue, PriorityQueue<Thread> patients,ArrayList<Thread> rossi) {
  137. this.id = id;
  138. this.codice = codice;
  139. this.numeroVisite = numeroVisite;
  140. this.medico = medico;
  141. this.queue = queue;
  142. this.patients = patients;
  143. this.rossi=rossi;
  144. }
  145. public void run() {
  146. while(numeroVisite>0){
  147. if (codice == 1) {
  148. queue[medico].visita();
  149. }
  150. else if (codice == 2) {
  151. queue[medico].visita();
  152. }
  153. else {
  154. for(int i=0;i<10;i++)
  155. queue[i].lockTotale();
  156. for(int i=0;i<10;i++)
  157. queue[i].visita();
  158. for(int i=0;i<10;i++)
  159. queue[i].signalTotale();
  160. for(int i=0;i<10;i++)
  161. queue[i].unlockTotale();
  162. }
  163. numeroVisite--;
  164. if(numeroVisite==0 && Thread.currentThread().getPriority()!=3){
  165. patients.poll();
  166. }
  167. else if(numeroVisite==0 && Thread.currentThread().getPriority()==3)
  168. rossi.remove(0);
  169.  
  170. }
  171. }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement