我有一个正在监听随机数的程序。它连接到一个发布者,它给了我一个数字和一个新的计数,每次我得到更新时,我都会将该数字的当前计数存储在 HashMap 中。
我还有一个监听请求的 SSL 服务器。当一个请求询问“我们有多少个 7”时,我只返回我的 HashMap 中的值。
现在我想添加一个逻辑,如果我们有 0 次出现该数字,请等到我们得到 1 次,然后返回该点的计数。但是,由于 Thread 的 run 方法的限制,我正在挣扎,它必须是一个 void。我想知道是否有任何方法可以将我的方法声明为始终启动新线程的方法,或者可能是比我正在做的更好的处理方法。这是我所拥有的:
private static volatile HashMap<Integer, Integer> occurenceMap= new HashMap<Integer, Integer>();
public synchronized static int getNumOccurrences(final Integer number) {
try {
(new Thread() {
public void run() {
Integer occurrences = occurenceMap.get(number);
if ( occurrences != null && occurrences > 0 ) {
// here I would like to just return occurences;
} else {
CountDownLatch latch = new CountDownLatch(1);
pendingList.put(number, latch);
latch.await();
// elsewhere in the code, I call countdown when I get a hit
pendingList.remove(number);
// once we've counted down, I would like to return the value
}
}
}).start();
} catch ( Throwable t ) { }
}
但是,我不能将 return 语句放在 run 方法中。那么如何做到最好呢?
谢谢!