启动/暂停/恢复/暂停...由其他类调用的方法

时间:2012-07-22 20:51:02

标签: java multithreading concurrency concurrent-programming

我想实现一个Anytime k-NN分类器,但我找不到一种方法来调用“classify(...)”方法一段特定的时间,暂停它,在方法暂停之前获取可用的结果,恢复该方法一段特定的时间,暂停它,在方法暂停之前获得可用的结果,等等...... 我使用数据结构来获得近似结果。当算法遍历数据结构时,它最终会遇到实际的训练数据向量。

public class AnytimeKNN{
 public int classify(queryPoint, k){
   class_label;
   1. Assign an initial value to 'class_label'.
   2.while(not actual training data vectors are encountered){
     1. traverse the data structure
     2. assign a new value to 'class_label'
    }
  }
}

我想以下列方式从main方法调用'classify(..)'方法:

  • 启动方法'classify(..)'
  • 当分配初始值为'class_label'时,暂停方法'classify(..)'。
  • 获取初始标签
  • 继续使用方法'classify(..)'获取X时间
  • 暂停方法'classify(..)'
  • 获取新的“class_label”
  • 在X时间内恢复方法'classify(..)' 等等....

提前致谢!

1 个答案:

答案 0 :(得分:1)

听起来像并发编程中的典型生产者 - 消费者场景。在Java中,您可以使用两个二进制信号量来解决此问题。一个告诉分类器它应该运行,一个告诉主线程得到下一个结果。分类器等待其信号量,直到它被主线程触发。主线程表现相似。

当然,还有其他选择,例如使用并发队列。分类器将其结果放入队列中,主线程将它们拉出,等待没有新结果。这将是我最喜欢的解决方案,但也许你有理由想要在固定的时间间隔内启动和停止该方法。