购物排队线有一些优先权

时间:2013-10-01 19:05:56

标签: java multithreading queue

我有一个典型的问题,我认为可以在Java中轻松处理。

我有一个购物队列,主要是两个,快递和正常。然后有客户正常和优先。 如果优先客户是免费的,则他们可以在快速通道中排队。快速通道作为名称建议需要1分钟处理项目和正常通道需要几分钟来处理项目。

现在让我们假设时间从零开始,在第一分钟,正常顾客到达时有5个项目,他应该被分配到正常车道,并且应该在10分钟内结账。在第5分钟的平均时间内,优先客户需要2个项目,然后他应该被分配到快车道,应该在2分钟内处理。

围绕这个典型线程队列相关问题的一些想法,方向和指针会很棒。

2 个答案:

答案 0 :(得分:1)

我的建议

有一个界面 - 客户

和2个类将扩展正常和表达

有两个队列,一个只接收快递,另一个接收客户(正常和快递)

为快递客户

检查他需要在快车道和正常车道等待/完成的预计时间)快车可以有1个,正常车道可以有0个, 这意味着他可能在正常情况下完成得更快

如果express更快,请检查express队列是否有插槽

如果是,请将他放入dat

否则

如果队列有一个插槽,

正常尝试

如果是,请将他放入dat

否则

把他赶走

对于普通客户

尝试正常

如果是的话,如果队列有一个插槽,则把他放在dat中

否则

把他赶走

答案 1 :(得分:0)

这可能有助于制定答案。这优先于作家而不是读者。您可以从中获得一些想法。

//@author: j.n.magee 11/11/96
//
// The Read Write Monitor Class - Writers priority
//
class ReadWritePriority implements ReadWrite{
  private int readers =0;
  private boolean writing = false;
  private int waitingW = 0; // no of waiting Writers.

  public synchronized void acquireRead()
             throws InterruptedException {
    while (writing || waitingW>0) wait();
     ++readers;
  }

  public synchronized void releaseRead() {
    --readers;
    if (readers==0) notifyAll();  // corrected
  }

  public synchronized void acquireWrite()
             throws InterruptedException {
    ++waitingW;
    while (readers>0 || writing) wait();
    --waitingW;
    writing = true;
  }

  public synchronized void releaseWrite() {
    writing = false;
    notifyAll();
  }
}