class producer
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());}
Y2xhc3MgcHJvZHVjZXIgZXh0ZW5kcyBUaHJlYWQgewoJUXVldWUgcXVldWU7CgkKCVByb2R1Y2VyKFF1ZXVlIHF1ZXVlKSB7CgkJdGhpcy5xdWV1ZSA9IHF1ZXVlOwoJfQoJCglwdWJsaWMgdm9pZCBydW4oKSB7CgkJaW50IGkgPSAwOwoJCXdoaWxlKHRydWUpIHsKCQkJcXVldWUuYWRkKGkrKyk7CgkJfQoJfQp9CgpjbGFzcyBDb25zdW1lciBleHRlbmRzIFRocmVhZCB7CglTdHJpbmcgc3RyOwoJUXVldWUgcXVldWU7CgkKCWNvbnN1bWVyKFN0cmluZyBzdHIsIFF1ZXVlIHF1ZXVlKSB7CgkJdGhpcy5zdHIgPSBzdHI7CgkJdGhpcy5xdWV1ZSA9IHF1ZXVlOwoJfQoJCglwdWJsaWMgdm9pZCBydW4oKSB7CgkJd2hpbGUodHJ1ZSkgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyICsgIjogIiArIHF1ZXVlLnJlbW92ZSgpKTsKCQl9Cgl9Cn0KCmNsYXNzIFF1ZXVlIHsKCXByaXZhdGUgZmluYWwgc3RhdGljIGludCBTSVpFID0gMTA7CglpbnQgYXJyYXlbXSA9IG5ldyBpbnRbU0laRV07CglpbnQgciA9IDA7CglpbnQgdyA9IDA7CglpbnQgY291bnQgPSAwOwoJCglzeW5jaHJvbml6ZWQgdm9pZCBhZGQoaW50IGkpIHsKCQkKCQkvLyDlvoXjgaHooYzliJfjgYzjgYTjgaPjgbHjgYTjga7loLTlkIjjga/lvoXmqZ/jgZnjgosKCQl3aGlsZSAoY291bnQgPT0gU0laRSkgewoJCQl0cnkgewoJCQkJd2FpdCgpOwoJCQl9IGNhdGNoKEludGVycmVwdGVkRXhjZXB0aW9uIGllKSB7CgkJCQlpZS5wcmludFN0YWNrVHJhY2UoKTsKCQkJCVN5c3RlbS5leGl0KDApOwoJCQl9CgkJfQoJCQoJCS8vIOmFjeWIl+OBq+ODh+ODvOOCv+OCkui/veWKoOOBl+OBpuabuOOBjei+vOOBv+ODneOCpOODs+OCv+OCkuabtOaWsOOBmeOCiwoJCWFycmF5W3crK10gPSBpOwoJCWlmICh3ID49IFNJWkUpIHsKCQkJdyA9IDA7CgkJfQoJCQoJCS8vIGNvdW5044Kr44Km44Oz44OI44KSMeOBpOWil+OChOOBmQoJCSsrY291bnQ7CgkJCgkJLy8g5b6F5qmf5Lit44Gu44K544Os44OD44OJ44Gr6YCa55+l44GZ44KLCgkJbm90aWZ5QWxsKCk7Cgl9CgkKCXN5bmNocm9uaXplZCBpbnQgcmVtb3ZlKCkgewoJCgkJLy8g5b6F44Gh6KGM5YiX44GM56m644Gu5aC05ZCI44Gv5b6F5qmf44GZ44KLCgkJd2hpbGUgKGNvdW50ID09IDApIHsKCQkJdHJ5IHsKCQkJCXdhaXQoKTsKCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewoJCQkJaWUucHJpbnRTdGFja1RyYWNlKCk7CgkJCQlTeXN0ZW0uZXhpdCgwKTsKCQkJfQoJCX0KCQkKCQkvLyDphY3liJfjgYvjgonjg4fjg7zjgr/jgpLoqq3jgb/lj5bjgaPjgaboqq3jgb/lj5bjgorjg53jgqTjg7Pjgr/jgpLmm7TmlrDjgZnjgosKCQlpbnQgZWxlbWVudCA9IGFycmF5W3IrK107CgkJaWYgKHIgPj0gU0laRSkgewoJCQlyID0gMDsKCQl9CgkJCgkJLy8gY291bnTjgpLkuIDjgaTmuJvjgonjgZkKCQktLWNvdW50OwoJCQoJCS8vIOW+heapn+S4reOBruOCueODrOODg+ODieOBq+mAmuefpeOBmeOCiwoJCW5vdGlmeUFsbCgpOwoJCQoJCS8vIOODh+ODvOOCv+OCkui/lOOBmQoJCXJldHVybiBlbGVtZW50OwoJfQp9CgpjbGFzcyBQcm9kdWNlckNvbnN1bWVycyB7CglRdWV1ZSBxdWV1ZSA9IG5ldyBRdWV1ZSgpOwoJbmV3IFByb2R1Y2VyKHF1ZXVlKS5zdGFydCgpOgoJbmV3IENvbnN1bWVyKCJDb25zdW1lckEiLCBxdWV1ZSkuc3RhcnQoKSk7CgluZXcgQ29uc3VtZXIoIkNvbnN1bWVyQiIsIHF1ZXVlKS5zdGFyMigpKTsKCW5ldyBDb25zdW1lcigiQ29uc3VtZXJDIiwgcXVldWUpLnN0YXJ0KCkpO30KCgo=
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