启动/暂停/恢复/暂停…由其他类调用的方法
我想实现一个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中,您可以使用两个二进制信号量来解决这个问题。 一个告诉分类器它应该运行,一个告诉主线程得到下一个结果。 分类器等待其信号量,直到它被主线程触发。 主线程表现相似。
当然,还有其他选择,例如使用并发队列。 分类器将其结果放入队列中,主线程将它们拉出,等待没有新结果。 这将是我最喜欢的解决方案,但也许你有理由要在固定的时间间隔内启动和停止方法。