2016-12-02 98 views
0

在我的項目中,我有一種從本地磁盤加載大型模型的方法。加載模型大約需要15分鐘,有時更多。我想要做的是創建一個runnable方法加載模型一次,然後,從不同的類我調用此方法來執行一些代碼。事實上,我不知道如何實現這一點,請你指導我嗎? 下面是簡單的僞代碼:調用不同類的可運行方法

// class A has two method , load the model , and does some calculation 
Class A: 1.Runnable method: LoadModel(); 
      2.Mehtod2: distance(); 
// here i would like to run this programe anytime, pass some parameters and call the method "distance" in class A 
Class B: 1.import Loadmodel() class and invoke distance(); 

在我的腦海,我想創建一個類似於服務器而不是服務器的東西:)

更新:下面的代碼是我到目前爲止已經試過。

public class load implements Runnable { 

    WordVectors wordVectors; 

    public void run() { 
     try { 
      load(); 
     } catch (FileNotFoundException ex) { 
      java.util.logging.Logger.getLogger(load.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (UnsupportedEncodingException ex) { 
      java.util.logging.Logger.getLogger(load.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

    public void load() throws FileNotFoundException, UnsupportedEncodingException { 
     //Your display method implementation. 
      wordVectors = WordVectorSerializer.loadTxtVectors(new File("glove.twitter.27B.200d.txt")); 
    } 

    public double Simmiraty(String a, String b){ 
     return wordVectors.similarity(a,b); 
    } 

    public static void main(String[] args) { 
     load Obj= new load(); 
     Obj.run(); 
    } 
} 

第二類:

public class B{ 

    public static void main(String[] args) throws Exception { 
     load ob =new load(); 
     System.out.println(ob.Simmiraty("iphone", "battery")); 
    } 
} 

我有上面的代碼prolem: 1.一旦加載模型停止運行。 2.我無法從第一類調用任何方法。

+0

您的代碼不可讀。請使用stackoverflow代碼塊功能。 – SachinSarawgi

回答

0
public class Load implements Runnable{ 

    private InputStream stream; 
    private static final Load instance; 
    private WordVectors wordVectors; 

    static { 
     instance = new Load(); 
     instance.run(); 
    } 

    public static Load GetLoad(){ 
     return instance; 
    } 

    private Load(){ 
     if(instance != null) 
      throw new UnsupportedOperationException(); 
    } 

    public voir run() { 
     if(wordVectors != null) 
      throw new UnsupportedOperationException(); 
     try { 
      load(); 
     } catch (Exception ex) { 
      Logger.getLogger(load.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public void load() throws FileNotFoundException, UnsupportedEncodingException { 
     stream = new InputStream(new File("glove.twitter.27B.200d.txt")); 
     wordVectors = WordVectorSerializer.loadTxtVectors(stream,false); 
    } 

    public void interrupt(){ 
     if(stream != null) 
      stream.close(); 
    } 

    public double Simmiraty(String a, String b){ 
     return wordVectors.similarity(a,b); 
    } 

    public static void main(){ 
     Load load = GetLoad(); 
    } 

} 

public class B{ 

    public void function(){ 
     Load load = Load.GetLoad(); 
    } 

} 
+0

但我想要一個類運行,直到我手動停止它。在運行時,它假設執行請求並返回結果back.I試圖做類似的事情,但我不能發送任何參數給A。另一個問題是該類A在加載文件後停止運行。 –

+0

@ AboodAl-mars所以你想讓兩個類從不同的Java應用程序進行通信? –

+0

然後你可能想看看[進程間通信](http://stackoverflow.com/questions/10942427/how-to-have-2-jvms-talk-to-one-another)。我做了[類似的東西](http://stackoverflow.com/questions/39804975/java-how-can-i-create-an-application-that-will-only-start-if-an-instance-of-它)不久前,我認爲它會幫助你。 –

相關問題