Я пытаюсь использовать Java для имитации набора счетчиков Checkout в торговом центре.
Это предположение.Есть 5 кассовых прилавков.Как настоящий торговый центр, у каждого прилавка есть линия.Каждый счетчик обслуживает одного клиента за раз.
Я пытался реализовать это следующим образом:
Каждый клиент - это класс, который запускает поток, аналогичный производителю впроблема производитель-потребитель.Клиенты являются частью блокировки блока.Мне как-то понадобится набор блокирующих очередей для имитации 5 строк перед 5 счетчиками проверки.Как мне этого добиться.
Счетчики проверки были определены как однопотоковая служба исполнителя.Так что теперь будет 5 исполнителей, которые будут обслуживать один (продюсерский) поток за раз.Я определил массив исполнителей, чтобы смоделировать эту группу из 5.
На счетчике один поток за раз из соответствующей очереди выполняется службой исполнителя (т. Е. Потребительпотребляя то, что производит производитель).
Правильна ли моя логика?
У меня есть код, но я не уверен, правильно ли моя логика была выполнена этим кодом.
Пожалуйста, помогите.Ура ..
код:
Checkout.java
package Supermarket;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class Checkout implements Runnable
{
public BlockingQueue<Integer> item_queue = new ArrayBlockingQueue<Integer>(10);
public int checkout_number;
public int item;
public Random random;
public Checkout(int checkout_number, BlockingQueue<Integer> item_queue)
{
this.checkout_number = checkout_number;
this.item_queue = item_queue;
random = new Random();
System.out.println("\nCheckout Counter Number: "+checkout_number);
}
public void run()
{
while(true)
{
if(item == -1)
{
System.out.println("Consumer finished");
break;
}
else
{
try
{
item = item_queue.take();
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("\nConsumer has taken item ==> "+item);
System.out.println("Scanning item");
try
{
Thread.sleep(random.nextInt(5000));
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
Customer.java
package Supermarket;
import java.util.*;
import java.util.concurrent.*;
public class Customer implements Runnable
{
public int item;
public int customer_number;
public int i;
public int item_count;
public Random random = new Random();
public BlockingQueue<Integer> item_queue = new ArrayBlockingQueue<Integer>(10);
public Customer(int customer_number, BlockingQueue<Integer> item_queue)
{
this.customer_number = customer_number;
this.item_queue = item_queue;
}
public void run()
{
item_count = random.nextInt(5);
System.out.println("I am customer Number: "+customer_number+" and I have "+item_count+" items");
for(i=0; i<item_count; i++)
{
try
{
item_queue.put(random.nextInt(10));
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try
{
item_queue.put(-1);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Driver.java
package Supermarket;
import java.util.concurrent.*;
import java.util.*;
public class Driver
{
public static BlockingQueue<Integer> item_queue = new ArrayBlockingQueue<Integer>(10);
public static Random random = new Random();
public static int customer_count;
public static int checkout_count;
public static int i;
public static void main(String[] args) {
// TODO Auto-generated method stub
customer_count = random.nextInt(4)+1;
// checkout_count = 5;
System.out.println("Total Number of Customers: "+customer_count+"\n");
for(i=0; i<customer_count; i++)
{
Customer customer = new Customer(i+1, item_queue);
Thread customer_thread = new Thread(customer);
customer_thread.start();
}
// for(i=0; i<=checkout_count; i++)
// {
// Checkout checkout = new Checkout(1, item_queue);
// Thread checkout_thread = new Thread(checkout);
// checkout_thread.start();
// }
// System.out.println("\n\nProgram Terminates!\n\n");
}
}