我有3个班。服务员(线程),表(线程)和队列(不是线程)(类似于先进先出队列)。如何使用同步原语来帮助Waiters在java中服务表?
最初几个服务员正在创建,然后创建表。比服务员有更多的桌子,所以桌子必须“等待”服务员为他们服务。我应该使用“java同步原语,等待notify和notifall”来解决这个问题。这里是每个类的指导原则:
表: 它启动时,它进入队列,然后调用一个内部方法waitService(),如果它已被服务或等待服务员返回。
我现在所拥有的这种方法的方式:
$if(serviced)
return 0;
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
服务员: 服务员的代码是不是真的给我任何问题,但实质上它的工作方式是,在run方法有一个无限循环它检查是否有一个表正在等待,然后给该表服务一段随机的时间,然后检查是否有另一个表正在等待。它通过调用表类中的giveService()方法让表知道它正在给它提供服务。
队列: 它有服务员的名单和表格的列表。服务员在准备好提供服务时调用队列类中的nextTable()。这是我如何设置:
$public Table nextTable(Waiter w) throws InterruptedException {
if(closed)
return null;
if(tables.isEmpty()) {
w.wait();
}
Table t = tables.removeFirst();
t.notify();
return t;
}
我知道上面可能有一些非常基本的错误,但基本上我不知道如何同步原语在java中工作。任何帮助,将不胜感激。
这功课吗?它应该被标记为这样。 – Gray 2012-04-04 13:59:29
是啊,它可是我不知道的方式来问这个问题,但没有提及实际硬件。我不希望有人为我解决它,只是有人可以解释如何在java中使用同步。 – bfresh 2012-04-04 14:01:04
没问题。我只是指出它应该有作业标签。 – Gray 2012-04-04 14:02:15