2012-07-22 43 views
1

我想實現一個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' 
    } 
    } 
} 

我想呼叫的 '分類(..)' 從主方法以下面的方式方法:

  • 啓動方法 '分類(..)'
  • 暫停方法'分類(..)'當初始值分配給'class_label'時。
  • 獲取的時間
  • 暫停方法X量 '分類(..)' 的初始標籤
  • 繼續該方法 '分類(..)'
  • 獲取新的 'class_label'
  • 恢復方法'分類(..)'X時間量爲 依此類推。

在此先感謝!

+0

[你以前的問題]有什麼區別(http://stackoverflow.com/questions/11592345/start-suspend-resume-a-method-in-java)? – assylias 2012-07-22 21:03:41

+0

與我之前的問題沒有什麼不同。我只是更詳細地重新定義了我的問題。我試圖用線程來做,但我對Java線程不熟悉。 – user1148747 2012-07-22 21:09:02

回答

1

聽起來像併發編程中的典型生產者 - 消費者場景。在Java中,您可以使用兩個二進制信號量來解決此問題。一個告訴分類器它應該運行,另一個告訴主線程獲得下一個結果。分類器等待它的信號量,直到它被主線程觸發。主線程的行爲類似。

當然,還會有其他選項,例如使用併發隊列。分類器將其結果放入隊列中,主線程將其拉出,等待是否沒有新的結果。這將是我最喜歡的解決方案,但也許你有一個原因,你想要在固定的時間間隔開始和停止方法。