ObjectFIFOTest.java
上传用户:songled
上传日期:2022-07-14
资源大小:94k
文件大小:5k
源码类别:

进程与线程

开发平台:

Java

  1. public class ObjectFIFOTest extends Object {
  2. private static void fullCheck(ObjectFIFO fifo) {
  3. try {
  4. // Sync'd to allow messages to print while 
  5. // condition is still true.
  6. synchronized ( fifo ) {
  7. while ( true ) {
  8. fifo.waitUntilFull();
  9. print("FULL");
  10. fifo.waitWhileFull();
  11. print("NO LONGER FULL");
  12. }
  13. }
  14. } catch ( InterruptedException ix ) {
  15. return;
  16. }
  17. }
  18. private static void emptyCheck(ObjectFIFO fifo) {
  19. try {
  20. // Sync'd to allow messages to print while 
  21. // condition is still true.
  22. synchronized ( fifo ) {
  23. while ( true ) {
  24. fifo.waitUntilEmpty();
  25. print("EMPTY");
  26. fifo.waitWhileEmpty();
  27. print("NO LONGER EMPTY");
  28. }
  29. }
  30. } catch ( InterruptedException ix ) {
  31. return;
  32. }
  33. }
  34. private static void consumer(ObjectFIFO fifo) {
  35. try {
  36. print("just entered consumer()");
  37. for ( int i = 0; i < 3; i++ ) {
  38. synchronized ( fifo ) {
  39. Object obj = fifo.remove();
  40. print("DATA-OUT - did remove(), obj=" + obj);
  41. }
  42. Thread.sleep(3000);
  43. }
  44. synchronized ( fifo ) {
  45. boolean resultOfWait = fifo.waitUntilEmpty(500);
  46. print("did waitUntilEmpty(500), resultOfWait=" +
  47. resultOfWait + ", getSize()=" + 
  48. fifo.getSize());
  49. }
  50. for ( int i = 0; i < 3; i++ ) {
  51. synchronized ( fifo ) {
  52. Object[] list = fifo.removeAll();
  53. print("did removeAll(), list.length=" + 
  54. list.length);
  55. for ( int j = 0; j < list.length; j++ ) {
  56. print("DATA-OUT - list[" + j + "]=" + 
  57. list[j]);
  58. }
  59. }
  60. Thread.sleep(100);
  61. }
  62. for ( int i = 0; i < 3; i++ ) {
  63. synchronized ( fifo ) {
  64. Object[] list = fifo.removeAtLeastOne();
  65. print(
  66. "did removeAtLeastOne(), list.length=" +
  67. list.length);
  68. for ( int j = 0; j < list.length; j++ ) {
  69. print("DATA-OUT - list[" + j + "]=" + 
  70. list[j]);
  71. }
  72. }
  73. Thread.sleep(1000);
  74. }
  75. while ( !fifo.isEmpty() ) {
  76. synchronized ( fifo ) {
  77. Object obj = fifo.remove();
  78. print("DATA-OUT - did remove(), obj=" + obj);
  79. }
  80. Thread.sleep(1000);
  81. }
  82. print("leaving consumer()");
  83. } catch ( InterruptedException ix ) {
  84. return;
  85. }
  86. }
  87. private static void producer(ObjectFIFO fifo) {
  88. try {
  89. print("just entered producer()");
  90. int count = 0;
  91. Object obj0 = new Integer(count);
  92. count++;
  93. synchronized ( fifo ) {
  94. fifo.add(obj0);
  95. print("DATA-IN - did add(), obj0=" + obj0);
  96. boolean resultOfWait = fifo.waitUntilEmpty(500);
  97. print("did waitUntilEmpty(500), resultOfWait=" +
  98. resultOfWait + ", getSize()=" + 
  99. fifo.getSize());
  100. }
  101. for ( int i = 0; i < 10; i++ ) {
  102. Object obj = new Integer(count);
  103. count++;
  104. synchronized ( fifo ) {
  105. fifo.add(obj);
  106. print("DATA-IN - did add(), obj=" + obj);
  107. }
  108. Thread.sleep(1000);
  109. }
  110. Thread.sleep(2000);
  111. Object obj = new Integer(count);
  112. count++;
  113. synchronized ( fifo ) {
  114. fifo.add(obj);
  115. print("DATA-IN - did add(), obj=" + obj);
  116. }
  117. Thread.sleep(500);
  118. Integer[] list1 = new Integer[3];
  119. for ( int i = 0; i < list1.length; i++ ) {
  120. list1[i] = new Integer(count);
  121. count++;
  122. }
  123. synchronized ( fifo ) {
  124. fifo.addEach(list1);
  125. print("did addEach(), list1.length=" + 
  126. list1.length);
  127. }
  128. Integer[] list2 = new Integer[8];
  129. for ( int i = 0; i < list2.length; i++ ) {
  130. list2[i] = new Integer(count);
  131. count++;
  132. }
  133. synchronized ( fifo ) {
  134. fifo.addEach(list2);
  135. print("did addEach(), list2.length=" + 
  136. list2.length);
  137. }
  138. synchronized ( fifo ) {
  139. fifo.waitUntilEmpty();
  140. print("fifo.isEmpty()=" + fifo.isEmpty());
  141. }
  142. print("leaving producer()");
  143. } catch ( InterruptedException ix ) {
  144. return;
  145. }
  146. }
  147. private static synchronized void print(String msg) {
  148. System.out.println(
  149. Thread.currentThread().getName() + ": " + msg);
  150. }
  151. public static void main(String[] args) {
  152. final ObjectFIFO fifo = new ObjectFIFO(5);
  153. Runnable fullCheckRunnable = new Runnable() {
  154. public void run() {
  155. fullCheck(fifo);
  156. }
  157. };
  158. Thread fullCheckThread = 
  159. new Thread(fullCheckRunnable, "fchk");
  160. fullCheckThread.setPriority(9);
  161. fullCheckThread.setDaemon(true); // die automatically
  162. fullCheckThread.start();
  163. Runnable emptyCheckRunnable = new Runnable() {
  164. public void run() {
  165. emptyCheck(fifo);
  166. }
  167. };
  168. Thread emptyCheckThread = 
  169. new Thread(emptyCheckRunnable, "echk");
  170. emptyCheckThread.setPriority(8);
  171. emptyCheckThread.setDaemon(true); // die automatically
  172. emptyCheckThread.start();
  173. Runnable consumerRunnable = new Runnable() {
  174. public void run() {
  175. consumer(fifo);
  176. }
  177. };
  178. Thread consumerThread = 
  179. new Thread(consumerRunnable, "cons");
  180. consumerThread.setPriority(7);
  181. consumerThread.start();
  182. Runnable producerRunnable = new Runnable() {
  183. public void run() {
  184. producer(fifo);
  185. }
  186. };
  187. Thread producerThread = 
  188. new Thread(producerRunnable, "prod");
  189. producerThread.setPriority(6);
  190. producerThread.start();
  191. }
  192. }