问题
Possible Duplicate:
Start/Suspend/Resume/Suspend … a method invoked by other class
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...
Thanks in advance!
回答1:
I posted a PauseableThread on here recently.
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();
}
来源:https://stackoverflow.com/questions/11592345/start-suspend-resume-a-method-in-java