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

我想实现一个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(..)’。
  • 获取初始标签
  • 在X时间内继续使用方法’classify(..)’
  • 暂停方法’classify(..)’
  • 获取新的“class_label”
  • 恢复方法’分类(..)’的X时间等等……

提前致谢!

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

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