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
   65   66   67   68   69   70   71   72   73   74   75