Реализация RMI сервера и клиента в отношении проблемы потребитель-производитель правильна? - PullRequest
0 голосов
/ 09 июля 2019

Я хотел бы знать, правильна ли моя реализация, так как я только недавно начал изучать концепцию RMI.Таким образом, есть N клиентов, которые используют один и тот же код (см. Реализацию) и сервер.Клиенты работают аналогично потребителю, который обращается к одному и тому же буферу с использованием концепции RMI.Сам сервер имеет производителя, который помещает элементы в буфер.Максимальный размер буфера - 20. Он предлагает доступ к буферу.

Вопрос: будет ли моя реализация работать правильно?Не против исключения.

Заранее спасибо!

public class Buffer
{
   private Vector<Integer> buffer;
   private Semaphor mutex;
   private boolean flag1;
   private boolean flag2;   

   public Buffer()
   {
      buffer = new Vector<Integer> buffer;
      mutex = new Semaphor(1);
      flag1 = false;
      flag2 = false;
   }

   public synchronized Integer get()
   {
      if (buffer.size() == 0)
      {
         flag1 = true;

         if(flag2)
         {
            notify();
         }

         try
         {
            wait();
         } catch(Exception e)
         {}
       }

       mutex.p();
       Integer temp = buffer.lastElement();
       buffer.remove(temp);
       mutex.v();

       return temp;
    }

    public synchronized void put(Integer a)
   {
      if (buffer.size() == 20)
      {
         flag2 = true;

         if(flag1)
         {
            notify();
         }

         try
         {
            wait();
         } catch(Exception e)
         {}
       }

       mutex.p();
       buffer.add(a);
       mutex.v();
    }
}



public interface Consumer extends Remote
{
   public Integer get() throws RemoteException;
}



public class ConsumerImpl extends UnicastRemoteObject implements Consumer
{
   private Buffer buffer;

   public ConsumerImpl(Buffer buff) throws RemoteException
   {
      buffer = buff;
   }

   public Integer get() throws RemoteException
   {
      return buffer.get();
   }
}



public class Producer extends Thread
{
   private Buffer buffer;

   public Producer(Buffer buff)
   {
      buffer = buff;
      this.start();
   }

   public void run()
   {
      Integer a = 0;

      while (true)
      {
         buffer.put(a);

         try
         {
            sleep(1000);
         }
         catch (Exception e) {}
      }
   }
}



public class Server
{
   public static void main(String[] args)
   {
      try
      {
         Buffer buffer = new Buffer();
         ConsumerImpl c1 = new ConsumerImpl(buffer);
         Producer prod = new Producer(buffer);
         Naming.rebind("Server1", c1);
       }
       catch(Exception e)
       {
          return;
       }
   }
}



public class Client_J
{
   public static void main(String[] args)
   {
      try
      {
         Consumer c1 = (Consumer) Naming.lookup("rmi://" + args[0] +   "/Server1");

         while(true)
         {
            System.out.println(c1.get());
         }
       }
       catch(Exception e)
       {
           return;
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...