如何在Java中等待多个阻塞队列?
例如,如果有一个客户想要进入等候休息室。 有3个候车室,每个休息室都有固定数量的座位。
考虑到这是一个并行编程问题,客户如何才能同时等待所有这些问题。
terminal.waitingArea1.enterWaitingArea(this);
terminal.waitingArea2.enterWaitingArea(this);
terminal.waitingArea3.enterWaitingArea(this);
如果我进入一个区域,我应该放弃等待其他区域的等待。该怎么办?
答案 0 :(得分:0)
基本逻辑是:
使用布尔变量(即flag
),该变量最初设置为false
。
当对象进入等待区域时,检查标志。
如果标志为false
,请将其设置为true,然后执行所需的操作。
如果标志为true
,只需从队列中删除对象,而无需执行任何操作。
如果要使用多个线程,请在对象上使用synchronized
。
答案 1 :(得分:0)
保留对Customer
this
正在等待的Customer
中的队列的引用。
何时
进入一个区域
从this
正在等待的所有队列中除去Customer
this
,除了该队列,remove
操作应为synchronized
。