Пример по теме “Java. Взаимодействие процессов”. Producer and consumer
// An implementation of a producer and consumer | |
class Q {int n;
synchronized int get() { try{Thread.sleep(1000);} catch(Exception e){} System.out.println("Got: " + n); return n; }
|
boolean valueSet = false;
synchronized int get() { if(!valueSet) try { wait(); } catch(InterruptedException e) { System.out.println("interruptedException caught"); }
System.out.println("Got: " + n); valueSet = false; notify(); return n; } |
synchronized void put(int n) {this.n = n;
System.out.println("Put: " + n); } }
|
synchronized void put(int n) { if(valueSet)
try { wait(); } catch(InterruptedException e) { System.out.println("interruptedException caught"); }
this.n = n; valueSet = true; System.out.println("Put: " + n); notify(); } } |
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);
System.out.println("Press Control-C to stop."); } }
|
Оставить комментарий