Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. public class V13
  2. {
  3. // Hvert tilvik af klasanum Container er ílát fyrir
  4. // heiltölu sem þræðir geta samtímis unnið
  5. // með.
  6. static class Container
  7. {
  8. boolean isEmpty = true;
  9. int theValue;
  10. // Fastayrðing gagna:
  11. // Ílátið er tómt þþaa isEmpty sé true.
  12. // Ef ílátið er ekki tómt þá inniheldur
  13. // theValue gildið í ílátinu.
  14.  
  15. // Notkun: c.put(x);
  16. // Eftir: Búið er að setja x í ílátið c.
  17. // Ef til vill þurfti að bíða eftir
  18. // að ílátið tæmdist áður en það
  19. // tókst.
  20. public synchronized void put( int x )
  21. throws InterruptedException
  22. {
  23. while( !isEmpty ) wait();
  24. isEmpty = false;
  25. theValue = x;
  26. notifyAll();
  27. }
  28.  
  29. // Notkun: x = c.get();
  30. // Eftir: Búið er að sækja x úr ílátinu c.
  31. // Ef til vill þurfti að bíða eftir
  32. // að ílátið fylltist áður en það
  33. // tókst.
  34. public synchronized int get()
  35. throws InterruptedException
  36. {
  37. while( isEmpty ) wait();
  38. int x = theValue;
  39. isEmpty = true;
  40. notifyAll();
  41. return x;
  42. }
  43. }
  44.  
  45. // Tilvik af klasanum Producer eru þræðir sem senda tölurnar
  46. // 0.0001,0,0002,...,1.0000 í ílát (Container) sem þeir hafa
  47. // tilvísun í og deyja svo drottni sínum.
  48. static class Producer extends Thread
  49. {
  50. final Container c;
  51. // Fastayrðing gagna:
  52. // c er ílátið sem þessi Producer sendir tölur í.
  53.  
  54. // Notkun: Producer prod = new Producer(c);
  55. // Fyrir: c er Container.
  56. // Eftir: prod er Producer sem setur tölur í c.
  57. public Producer( Container c )
  58. {
  59. this.c = c;
  60. }
  61.  
  62. // Notkun: prod.run();
  63. // Fyrir: Ekkert.
  64. // Eftir: prod er búinn að senda 0 til 9999 í sinn
  65. // Container.
  66. public void run()
  67. {
  68. try
  69. {
  70. for( int i=1 ; i!=10001 ; i++ )
  71. {
  72. c.put(i);
  73. }
  74. }
  75. catch( InterruptedException e )
  76. {
  77. }
  78. }
  79. }
  80.  
  81. // Tilvik af klasanum Consumer eru þræðir sem taka
  82. // 10000 tölur úr íláti (Container) sem þeir
  83. // hafa tilvísun í, skrifa svo summu talnanna, og
  84. // deyja svo drottni sínum.
  85. static class Consumer extends Thread
  86. {
  87. final Container c;
  88. // Fastayrðing gagna:
  89. // c er ílátið sem þessi Consumer sækir tölur úr.
  90.  
  91. // Notkun: Consumer cons = new Consumer(c);
  92. // Fyrir: c er Container.
  93. // Eftir: cons er Consumer sem sækir tölur úr c.
  94. public Consumer( Container c )
  95. {
  96. this.c = c;
  97. }
  98.  
  99. // Notkun: cons.run();
  100. // Fyrir: Ekkert.
  101. // Eftir: cons er búinn að sækja 10000 tölur
  102. // úr sínum Container og skrifa summuna.
  103. public void run()
  104. {
  105. try
  106. {
  107. long sum = 0;
  108. for( int i=0 ; i!=10000 ; i++ )
  109. {
  110. sum += c.get();
  111. }
  112. System.out.println(sum);
  113. }
  114. catch( InterruptedException e )
  115. {
  116. }
  117. }
  118. }
  119.  
  120. // Notkun: (á skipanalínu) java V13
  121. // Fyrir: Ekkert.
  122. // Eftir: Búið er að skrifa töluna 1+2+...+10000
  123. public static void main( String[] args )
  124. {
  125. Container c = new Container();
  126. Producer prod = new Producer(c);
  127. Consumer cons = new Consumer(c);
  128. prod.start();
  129. cons.start();
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement