我想实现一个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'
}
}
}
我想以以下方式从主方法中调用“ classify(..)”方法:
>启动方法“ classify(..)”
>为“ class_label”分配初始值时,暂停方法“ classify(..)”.
>获取初始标签
>继续方法’classify(..)’X时间
>暂停方法’classify(..)’
>获取新的“ class_label”
>在X时间内恢复方法’classify(..)’
等等…
提前致谢!
解决方法:
听起来像是并行编程中典型的生产者-消费者方案.在Java中,您可以使用两个二进制信号量来解决此问题.一个告诉分类器应该运行,另一个告诉主线程获取下一个结果.分类器等待其信号量,直到由主线程触发.主线程的行为类似.
当然,还有其他选择,例如使用并发队列.分类器将其结果放入队列,主线程将其拉出,等待是否没有新结果.这将是我最喜欢的解决方案,但是也许您有理由要在固定的时间间隔内启动和停止该方法.
标签:concurrent-programming,java,multithreading,concurrency
来源: https://codeday.me/bug/20191013/1907248.html