我有一个典型的问题,我认为可以在Java中轻松处理。
我有一个购物队列,主要是两个,快递和正常。然后有客户正常和优先。 如果优先客户是免费的,则他们可以在快速通道中排队。快速通道作为名称建议需要1分钟处理项目和正常通道需要几分钟来处理项目。现在让我们假设时间从零开始,在第一分钟,正常顾客到达时有5个项目,他应该被分配到正常车道,并且应该在10分钟内结账。在第5分钟的平均时间内,优先客户需要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();
}
}