如果方法b()的调用时间超过N秒,如何执行方法c()



方法a((将数据发送到方法b((,如果方法b(?

public void methodB(byte[] audioData) throws IOException {
byte[] transcodedVoice = transcodeVoice(audioData);
recognizer.acceptWaveForm(transcodedVoice, transcodedVoice.length);
}
public void methodC() {
//do Something
System.out.println("Method B stops getting data")
}

Debuncert类

public class Debouncer {
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
private final ConcurrentHashMap<Object, Future<?>> delayedMap = new ConcurrentHashMap<>();
/**
* Debounces {@code callable} by {@code delay}, i.e., schedules it to be executed after {@code delay},
* or cancels its execution if the method is called with the same key within the {@code delay} again.
*/
public void debounce(final Object key, final Runnable runnable, long delay, TimeUnit unit) {
final Future<?> prev = delayedMap.put(key, scheduler.schedule(new Runnable() {
@Override
public void run() {
try {
runnable.run();
} finally {
delayedMap.remove(key);
}
}
}, delay, unit));
if (prev != null) {
prev.cancel(true);
}
}
public void shutdown() {
scheduler.shutdownNow();
}
}

我的类使用方法b((

final Debouncer debouncer = new Debouncer();
public void methodB(byte[] audioData) throws IOException {
byte[] transcodedVoice = transcodeVoice(audioData);
recognizer.acceptWaveForm(transcodedVoice, transcodedVoice.length);
debouncer.debounce(Void.class, new Runnable() {
@Override public void run() {
System.out.println("Method B stops getting data");
}
}, 300, TimeUnit.MILLISECONDS);
}

最新更新