【问题标题】:Shopping queue-line with some priority优先购物排队
【发布时间】:2013-10-02 09:42:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • 问题是什么?从您目前所描述的情况来看,所有优先客户都走快车道,所有普通客户都走普通车道。
  • 你问的是如何实际编写程序?我们不会为你这样做。首先向我们展示您的尝试,然后我们将帮助您修复它。
  • 正如我提到的,我不要求任何现成的代码。我只要求可以帮助我前进的方向和指示。我不想迷失在 Java 的高级特性中

标签: java multithreading queue


【解决方案1】:

我的建议

有一个接口 - 客户

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

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

对于快递客户

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

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

如果是的话,把他放进去

其他

如果队列有槽则正常尝试

如果是的话,把他放进去

其他

把他赶走

普通客户

正常试试

如果是,如果队列有空位,则将他放入 dat

其他

把他赶走

【讨论】:

    【解决方案2】:

    这可能有助于制定答案。这使作者优先于读者。你或许能从中得到一些想法。

    //@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();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      相关资源
      最近更新 更多