繁体   English   中英

从不同的类调用可运行方法

[英]Calling a runnable method from different class

在我的项目中,我有一种从本地磁盘加载大型模型的方法。 加载模型大约需要15分钟,有时甚至更长。 我想做的是创建一个可运行的方法,该方法一次加载模型,然后从不同的类中调用此方法来执行一些代码。 实际上,我不确定如何实现这一目标,您能指导我吗? 这是简单的伪代码:

// 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"));
    }
}

我不得不对上面的代码提出疑问:1.一旦加载了模型,它就会停止运行。 2.我不能从frist类中调用任何方法。

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();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM