0

我有一个典型的问题,我认为它可以在 Java 中很容易地处理。

我的购物队列主要有两个,快递和普通。然后有客户正常和优先。如果有空,优先客户将被分配到快车道,否则他们可以在快车道排队。顾名思义,快速通道需要 1 分钟来处理物品,而普通通道需要几分钟来处理物品。

现在让我们假设时间从零开始,在第一分钟,一个普通客户带着 5 件物品到达,他应该被分配到正常车道并应该在 10 分钟内结帐。同时在第 5 分钟优先客户带了 2 件物品,然后他应该被分配到快递通道,并应在 2 分钟内处理。

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

4

2 回答 2

1

我的建议

有一个接口 - 客户

和 2 个类,它们将扩展正常并表达

有 2 个队列,一个只接收快递,另一个接收客户(普通和快递)

对于快递客户

检查他需要在快速车道和普通车道等待/完成的估计时间)快速车道可以有 1,普通车道可以有 0,这意味着他可能在正常车道上完成得更快

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

如果是的话,把他放在dat

别的

如果队列有插槽,则正常尝试

如果是的话,把他放在dat

别的

赶他走

对于普通客户

正常试试

如果是,则将他放入 dat 如果队列有插槽

别的

赶他走

于 2013-10-01T19:32:30.663 回答
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();
  }
}
于 2013-10-02T01:36:48.567 回答