在Java中启动/暂停/恢复方法 [英] Start/Suspend/Resume a method in Java

查看:169
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆