Start/Suspend/Resume a method in Java [duplicate]

孤街浪徒 提交于 2019-12-11 09:43:03

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!