Page 70 - 4657
P. 70
synchronized int get() {
System.out.println("Got: " + n);
return n;
}
synchronized void put(int n) {
this.n = n;
System.out. println("Put: " + n);
} }
class Producer implements Runnable {
Q q;
Producer(Q q) {
this.q = q;
new Thread(this, "Producer").start();
}
public void run() {
int i = 0;
while (true) {
q.put(i++);
} } }
class Consumer implements Runnable {
Q q;
Consumer(Q q) {
this.q = q;
new Thread(this, "Consumer").start();
}
public void run() {
while (true) {
q.get();
}
} }
class PC {
public static void main(String args[]) {
Q q = new Q();
new Producer(q);
new Consumer(q);
} }
Хоча методи put і get класу Q синхронізованыі у нашому
прикладі немає нічого, що б могло перешкодити постачальнику
переписувати дані по того, як їх одержить споживач, і навпаки,
68