java - Java 中的启动/暂停/恢复方法

标签 java multithreading java.util.concurrent concurrent-programming

Possible Duplicate:
Start/Suspend/Resume/Suspend … a method invoked by other class

我想实现一个 Anytime k-NN 分类器,但我找不到在特定时间内调用“classify(...)”方法、暂停它、在该方法暂停之前获取可用结果的方法,恢复该方法特定的时间,暂停它,获取该方法暂停之前的可用结果,依此类推...

提前致谢!

最佳答案

我发布了PauseableThread最近在这里。

您可以使用ReadWriteLock 实现暂停。如果您每次遇到暂停机会时都会立即捕获一个写锁,那么您只需要暂停者捕获一个读锁来暂停您。

  // 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 - Java 中的启动/暂停/恢复方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11592345/

相关文章:

java - 使用 Twitter4J 的 friend 的 friend 列表

java - 有ConcurrentHashMap为什么还要synchronizedMap()?

java - 在 servlet 中,我想在另一个线程运行时有一个 response.print()

java - 在 sun.misc.Unsafe.park 等待( native 方法)

java - AtomicInteger 与 Java 中的同步 int 变量 : performance difference

java - gson 抛出 MalformedJsonException

java - StatusBar 不是抽象的,不会覆盖抽象方法 onPreferenceChange

java - 静态函数和非静态函数中 'Object obj = new Object()'和 'Object obj = null'的区别

c++ - 阻塞模式的原理是什么?

c++ - std::async 和 std::future 是否在幕后使用互斥体和条件变量?