class pRroducer
extends Thread { Queue queue;
Producer(Queue queue) {
this.queue = queue;
}
public void run() {
int i = 0;
while(true) {
queue.add(i++);
}
}
}
class Consumer
extends Thread { Queue queue;
consumer
(String str, Queue queue
) { this.str = str;
this.queue = queue;
}
public void run() {
while(true) {
System.
out.
println(str
+ ": " + queue.
remove()); }
}
}
class Queue {
private final static int SIZE = 10;
int array[] = new int[SIZE];
int r = 0;
int w = 0;
int count = 0;
synchronized void add(int i) {
// 待ち行列がいっぱいの場合は待機する
while (count == SIZE) {
try {
wait();
} catch(InterreptedException ie) {
ie.printStackTrace();
}
}
// 配列にデータを追加して書き込みポインタを更新する
array[w++] = i;
if (w >= SIZE) {
w = 0;
}
// countカウントを1つ増やす
++count;
// 待機中のスレッドに通知する
notifyAll();
}
synchronized int remove() {
// 待ち行列が空の場合は待機する
while (count == 0) {
try {
wait();
ie.printStackTrace();
}
}
// 配列からデータを読み取って読み取りポインタを更新する
int element = array[r++];
if (r >= SIZE) {
r = 0;
}
// countを一つ減らす
--count;
// 待機中のスレッドに通知する
notifyAll();
// データを返す
return element;
}
}
class ProducerConsumers {
Queue queue = new Queue();
new Producer(queue).start():
new Consumer("ConsumerA", queue).start());
new Consumer("ConsumerB", queue).star2());
new Consumer("ConsumerC", queue).start());}
Y2xhc3MgcFJyb2R1Y2VyIGV4dGVuZHMgVGhyZWFkIHsKCVF1ZXVlIHF1ZXVlOwoJCglQcm9kdWNlcihRdWV1ZSBxdWV1ZSkgewoJCXRoaXMucXVldWUgPSBxdWV1ZTsKCX0KCQoJcHVibGljIHZvaWQgcnVuKCkgewoJCWludCBpID0gMDsKCQl3aGlsZSh0cnVlKSB7CgkJCXF1ZXVlLmFkZChpKyspOwoJCX0KCX0KfQoKY2xhc3MgQ29uc3VtZXIgZXh0ZW5kcyBUaHJlYWQgewoJU3RyaW5nIHN0cjsKCVF1ZXVlIHF1ZXVlOwoJCgljb25zdW1lcihTdHJpbmcgc3RyLCBRdWV1ZSBxdWV1ZSkgewoJCXRoaXMuc3RyID0gc3RyOwoJCXRoaXMucXVldWUgPSBxdWV1ZTsKCX0KCQoJcHVibGljIHZvaWQgcnVuKCkgewoJCXdoaWxlKHRydWUpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKHN0ciArICI6ICIgKyBxdWV1ZS5yZW1vdmUoKSk7CgkJfQoJfQp9CgpjbGFzcyBRdWV1ZSB7Cglwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU0laRSA9IDEwOwoJaW50IGFycmF5W10gPSBuZXcgaW50W1NJWkVdOwoJaW50IHIgPSAwOwoJaW50IHcgPSAwOwoJaW50IGNvdW50ID0gMDsKCQoJc3luY2hyb25pemVkIHZvaWQgYWRkKGludCBpKSB7CgkJCgkJLy8g5b6F44Gh6KGM5YiX44GM44GE44Gj44Gx44GE44Gu5aC05ZCI44Gv5b6F5qmf44GZ44KLCgkJd2hpbGUgKGNvdW50ID09IFNJWkUpIHsKCQkJdHJ5IHsKCQkJCXdhaXQoKTsKCQkJfSBjYXRjaChJbnRlcnJlcHRlZEV4Y2VwdGlvbiBpZSkgewoJCQkJaWUucHJpbnRTdGFja1RyYWNlKCk7CgkJCQlTeXN0ZW0uZXhpdCgwKTsKCQkJfQoJCX0KCQkKCQkvLyDphY3liJfjgavjg4fjg7zjgr/jgpLov73liqDjgZfjgabmm7jjgY3ovrzjgb/jg53jgqTjg7Pjgr/jgpLmm7TmlrDjgZnjgosKCQlhcnJheVt3KytdID0gaTsKCQlpZiAodyA+PSBTSVpFKSB7CgkJCXcgPSAwOwoJCX0KCQkKCQkvLyBjb3VudOOCq+OCpuODs+ODiOOCkjHjgaTlopfjgoTjgZkKCQkrK2NvdW50OwoJCQoJCS8vIOW+heapn+S4reOBruOCueODrOODg+ODieOBq+mAmuefpeOBmeOCiwoJCW5vdGlmeUFsbCgpOwoJfQoJCglzeW5jaHJvbml6ZWQgaW50IHJlbW92ZSgpIHsKCQoJCS8vIOW+heOBoeihjOWIl+OBjOepuuOBruWgtOWQiOOBr+W+heapn+OBmeOCiwoJCXdoaWxlIChjb3VudCA9PSAwKSB7CgkJCXRyeSB7CgkJCQl3YWl0KCk7CgkJCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKCQkJCWllLnByaW50U3RhY2tUcmFjZSgpOwoJCQkJU3lzdGVtLmV4aXQoMCk7CgkJCX0KCQl9CgkJCgkJLy8g6YWN5YiX44GL44KJ44OH44O844K/44KS6Kqt44G/5Y+W44Gj44Gm6Kqt44G/5Y+W44KK44Od44Kk44Oz44K/44KS5pu05paw44GZ44KLCgkJaW50IGVsZW1lbnQgPSBhcnJheVtyKytdOwoJCWlmIChyID49IFNJWkUpIHsKCQkJciA9IDA7CgkJfQoJCQoJCS8vIGNvdW5044KS5LiA44Gk5rib44KJ44GZCgkJLS1jb3VudDsKCQkKCQkvLyDlvoXmqZ/kuK3jga7jgrnjg6zjg4Pjg4njgavpgJrnn6XjgZnjgosKCQlub3RpZnlBbGwoKTsKCQkKCQkvLyDjg4fjg7zjgr/jgpLov5TjgZkKCQlyZXR1cm4gZWxlbWVudDsKCX0KfQoKY2xhc3MgUHJvZHVjZXJDb25zdW1lcnMgewoJUXVldWUgcXVldWUgPSBuZXcgUXVldWUoKTsKCW5ldyBQcm9kdWNlcihxdWV1ZSkuc3RhcnQoKToKCW5ldyBDb25zdW1lcigiQ29uc3VtZXJBIiwgcXVldWUpLnN0YXJ0KCkpOwoJbmV3IENvbnN1bWVyKCJDb25zdW1lckIiLCBxdWV1ZSkuc3RhcjIoKSk7CgluZXcgQ29uc3VtZXIoIkNvbnN1bWVyQyIsIHF1ZXVlKS5zdGFydCgpKTt9CgoK
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