在Java中启动/暂停/恢复方法 [英] Start/Suspend/Resume a method in Java
问题描述
我想实现一个随时k-分类器,但我找不到一种方法来调用classify(...)方法一个特定的时间,暂停它,获得可用的结果之前,该方法被暂停,恢复该方法一段特定的时间,暂停
I want to implement an Anytime k-NN classifier but I cannot find a way to call the "classify(...)" method for a specific amount of time, suspend it, get the available results before the method was suspended, resume the method for a specific amount of time, suspend it, get the available results before the method was suspended, and so on...
提前感谢!
推荐答案
我发布了一个 PauseableThread 。
您可以使用 ReadWriteLock
实现暂停。如果你暂时抓住一个写锁定,每次你有机会暂停,那么你只需要pauser抓取读锁,以暂停你。
You can implement a pause using a ReadWriteLock
. If you momentarily grab a write lock on it every time you hit an opportunity to pause then you just need the pauser to grab a read lock to pause you.
// The lock.
private final ReadWriteLock pause = new ReentrantReadWriteLock();
// Block if pause has been called without a matching resume.
private void blockIfPaused() throws InterruptedException {
try {
// Grab a write lock. Will block if a read lock has been taken.
pause.writeLock().lockInterruptibly();
} finally {
// Release the lock immediately to avoid blocking when pause is called.
pause.writeLock().unlock();
}
}
// Pause the work. NB: MUST be balanced by a resume.
public void pause() {
// We can wait for a lock here.
pause.readLock().lock();
}
// Resume the work. NB: MUST be balanced by a pause.
public void resume() {
// Release the lock.
pause.readLock().unlock();
}
这篇关于在Java中启动/暂停/恢复方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!