我使用了一個事件系統的外部框架,爲簡單起見,假設它是這樣的:尋找與Java併發API事件同步的清潔解決方案
public interface EventListener {
public void eventA(int a);
public void eventB(int a, long b);
}
因此事件系統的屬性是在事件A之後,可能會或可能不會有相同的事件B.但是如果有事件B,那麼它需要在3000毫秒之內。
我不知道什麼乾淨的解決方案有針對這個問題,我看着在java.util.concurrency
包,我沒有發現任何東西,能夠爲這個問題一個很好的清潔解決方案。我想我可能會使用Future<?>
,但我不能提出一個很好的解決方案。
我將在僞代碼寫的東西我想做的事:
public void eventA(int a) {
// fired Event A
if (within the next 3 seconds there was an eventB for _exactly_ this a)
doSomething(a, b)
else
doSomething(a)
}
public void eventB(int a, long b) {
}
到目前爲止,我使用ConcurrentHashmap<Int, Long>
,我存儲所有AB組合從eventB和我檢查,如果最後3000毫秒內我這樣的ab組合在eventA
中,但我對這個解決方案並不滿意。我覺得需要使用Java 1.5更高級別的併發API來提供更簡潔的方式。
我會很高興提供一個乾淨的解決方案提示該問題。
如果你調用'doSomething(a)',然後2秒後'doSomething(a,b)'爲同樣的'a',會發生什麼?這是可以接受的行爲嗎? –
Tikitaka Salinas? – edutesoy
請使用比「a」,「b」和「doSomething」更多的描述性名稱。否則很難理解你試圖達到的目標。 –