首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从threadExecutor返回值

从threadExecutor返回值
EN

Stack Overflow用户
提问于 2012-03-13 05:16:28
回答 3查看 174关注 0票数 0

如何在固定的threadExecutor中访问getOptimizedMol()方法?我需要在每个优化器线程结束时获得返回分子?

代码语言:javascript
复制
import chemaxon.marvin.calculations.ConformerPlugin;
import chemaxon.marvin.plugin.PluginException;
import chemaxon.struc.Molecule;

public class Optimizer3D implements Runnable {


    private Molecule mol3D;
    private Molecule mol2D;

    Optimizer3D(Molecule mol2D_)
    {
       this.mol2D = mol2D_; 
    }

    @Override
    public void run() {
        mol3D = chemAxonOptimizer();
    }

    private Molecule chemAxonOptimizer()
    {
        //optimize molecule code not shown
        return molecule;

    }


    public Molecule getOptimizedMol()
    {
        return mol3D;
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-13 05:27:17

使用Callable:

代码语言:javascript
复制
public class Optimizer3D implements Callable<Molecule>{
    private Molecule mol3D;
    private Molecule mol2D;

    Optimizer3D(Molecule mol2D_)
    {
       this.mol2D = mol2D_; 
    }

    @Override
    public Molecule call() {
        mol3D = chemAxonOptimizer();
        return getOptimizedMol();
    }

    private Molecule chemAxonOptimizer()
    {
        //optimize molecule code not shown
        return molecule;

    }


    private Molecule getOptimizedMol()
    {
        return mol3D;
    }
}

然后从你的遗嘱执行者:

代码语言:javascript
复制
Future<Molecule > future = executor.submit(yourTask);
Molecule  yourValue = future.get();
票数 0
EN

Stack Overflow用户

发布于 2012-03-13 05:25:34

一个简单的技术是在你的runnable中添加某种JobListener:

代码语言:javascript
复制
public class Optimizer3D implements Runnable {

    public static interface JobListener {
         public void onJobFinished(Optimizer3D job);
    }

    private Molecule mol3D;
    private Molecule mol2D;
    private JobListener jobListener;
    Optimizer3D(Molecule mol2D_, JobListener listener)
    {
       this.mol2D = mol2D_; 
       this.jobListener = listener;
    }

    @Override
    public void run() {
        mol3D = chemAxonOptimizer();
        if (jobListener!=null) {
            jobListener.onJobFinished(this);
        }
    }

    private Molecule chemAxonOptimizer()
    {
        //optimize molecule code not shown
        return molecule;

    }


    public Molecule getOptimizedMol()
    {
        return mol3D;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-03-13 05:27:23

您需要的是Callable而不是RunnableCallable将返回您的结果。

您可以通过如下方式获取:

代码语言:javascript
复制
Future<YourExpectedResult> future = executor.submit(new YourCallable());
YourExpectedResult result = future.get();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9674941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档