1 Ocak 2017 Pazar

Java Consumer and Producer

/***********************************************************************************
---------Processor--------
+lock
+liste
+LIMIT
 -consumer()
 -producer()
  -start()
-----------------------------
Processor sınıfı içinde bir bağlı liste tutmaktadır. Uretici maksimum üretim miktarı 10 olarak belirlenmiştir.
Uretim başlamadan tüketim yapılamaz.Tüketici 10 elamanını tükettikten sonra bekleme durumunda. Uretici ise LIMIT=10 ulaştığında üretimi durdurmaktadır.Taki  tüketici ürünleri alana kadar.
LIMIT=0 ise Üretici  üretmeye başlar.  LIMIT=10 ise Tüketici tüketmeye başlar. LIMIT=10 Üretim durmaktadır. LIMIT=0 ise Tüketici beklemektedir.

/*********************Source Code Java*************************************
package com.thre.aproach;

import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author ozaytunctan13
 */
public class Processor {

    private Object lock = new Object();
    private LinkedList<Integer> list = new LinkedList<>();
    private final int LIMIT = 10;
    private int value = 0;

    public void consume() throws InterruptedException {
        while (true) {
            synchronized (lock) {
                while (list.size() == 0) {
                    lock.wait();
                }
                System.out.print("List is size " + list.size());
                int val = list.removeFirst();
                System.out.println(" consumer is value is  " + val);
                lock.notify();
            }
            Thread.sleep(1000);
        }
    }

    public void produce() throws InterruptedException {

        while (true) {
            synchronized (lock) {
                while (list.size() == LIMIT) {
                    try {
                        lock.wait();
                    } catch (InterruptedException ex) {
                        ex.printStackTrace();
                    }
                }
                list.add(value++);
                lock.notify();
            }

        }
    }

    public void start() {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    produce();
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        });
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    consume();
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
            }
        });
        t1.start();
        t2.start();
        try {
            t1.join();
            t2.join();
        } catch (Exception e) {
        }
    }

    public static void main(String[] args) {
        Processor p = new Processor();
        p.start();
    }
}


Hiç yorum yok:

Yorum Gönder

Lütfen yorumlarınızı iletiniz...