fork download
  1. class producer extends Thread {
  2. Queue queue;
  3.  
  4. Producer(Queue queue) {
  5. this.queue = queue;
  6. }
  7.  
  8. public void run() {
  9. int i = 0;
  10. while(true) {
  11. queue.add(i++);
  12. }
  13. }
  14. }
  15.  
  16. class Consumer extends Thread {
  17. String str;
  18. Queue queue;
  19.  
  20. consumer(String str, Queue queue) {
  21. this.str = str;
  22. this.queue = queue;
  23. }
  24.  
  25. public void run() {
  26. while(true) {
  27. System.out.println(str + ": " + queue.remove());
  28. }
  29. }
  30. }
  31.  
  32. class Queue {
  33. private final static int SIZE = 10;
  34. int array[] = new int[SIZE];
  35. int r = 0;
  36. int w = 0;
  37. int count = 0;
  38.  
  39. synchronized void add(int i) {
  40.  
  41. // 待ち行列がいっぱいの場合は待機する
  42. while (count == SIZE) {
  43. try {
  44. wait();
  45. } catch(InterreptedException ie) {
  46. ie.printStackTrace();
  47. System.exit(0);
  48. }
  49. }
  50.  
  51. // 配列にデータを追加して書き込みポインタを更新する
  52. array[w++] = i;
  53. if (w >= SIZE) {
  54. w = 0;
  55. }
  56.  
  57. // countカウントを1つ増やす
  58. ++count;
  59.  
  60. // 待機中のスレッドに通知する
  61. notifyAll();
  62. }
  63.  
  64. synchronized int remove() {
  65.  
  66. // 待ち行列が空の場合は待機する
  67. while (count == 0) {
  68. try {
  69. wait();
  70. } catch(InterruptedException ie) {
  71. ie.printStackTrace();
  72. System.exit(0);
  73. }
  74. }
  75.  
  76. // 配列からデータを読み取って読み取りポインタを更新する
  77. int element = array[r++];
  78. if (r >= SIZE) {
  79. r = 0;
  80. }
  81.  
  82. // countを一つ減らす
  83. --count;
  84.  
  85. // 待機中のスレッドに通知する
  86. notifyAll();
  87.  
  88. // データを返す
  89. return element;
  90. }
  91. }
  92.  
  93. class ProducerConsumers {
  94. Queue queue = new Queue();
  95. new Producer(queue).start():
  96. new Consumer("ConsumerA", queue).start());
  97. new Consumer("ConsumerB", queue).star2());
  98. new Consumer("ConsumerC", queue).start());}
  99.  
  100.  
  101.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:4: error: invalid method declaration; return type required
	Producer(Queue queue) {
	^
Main.java:20: error: invalid method declaration; return type required
	consumer(String str, Queue queue) {
	^
Main.java:95: error: illegal start of type
	new Producer(queue).start():
	^
Main.java:95: error: ';' expected
	new Producer(queue).start():
	   ^
Main.java:95: error: illegal start of type
	new Producer(queue).start():
	            ^
Main.java:95: error: ';' expected
	new Producer(queue).start():
	                  ^
Main.java:95: error: invalid method declaration; return type required
	new Producer(queue).start():
	                    ^
Main.java:95: error: ';' expected
	new Producer(queue).start():
	                           ^
Main.java:97: error: illegal start of type
	new Consumer("ConsumerB", queue).star2());
	^
Main.java:97: error: ';' expected
	new Consumer("ConsumerB", queue).star2());
	   ^
Main.java:97: error: illegal start of type
	new Consumer("ConsumerB", queue).star2());
	            ^
Main.java:97: error: <identifier> expected
	new Consumer("ConsumerB", queue).star2());
	             ^
Main.java:97: error: ';' expected
	new Consumer("ConsumerB", queue).star2());
	                               ^
Main.java:97: error: invalid method declaration; return type required
	new Consumer("ConsumerB", queue).star2());
	                                 ^
Main.java:97: error: ';' expected
	new Consumer("ConsumerB", queue).star2());
	                                        ^
Main.java:98: error: illegal start of type
	new Consumer("ConsumerC", queue).start());}
	^
Main.java:98: error: ';' expected
	new Consumer("ConsumerC", queue).start());}
	   ^
Main.java:98: error: illegal start of type
	new Consumer("ConsumerC", queue).start());}
	            ^
Main.java:98: error: <identifier> expected
	new Consumer("ConsumerC", queue).start());}
	             ^
Main.java:98: error: ';' expected
	new Consumer("ConsumerC", queue).start());}
	                               ^
Main.java:98: error: invalid method declaration; return type required
	new Consumer("ConsumerC", queue).start());}
	                                 ^
Main.java:98: error: ';' expected
	new Consumer("ConsumerC", queue).start());}
	                                        ^
22 errors
stdout
Standard output is empty