2012-03-12 17 views
0

固定されたthreadExecutor内でgetOptimizedMol()メソッドにアクセスするにはどうすればよいですか?各オプティマイザスレッドが終了すると、戻り分子を取得する必要がありますか?戻り値threadExecutor

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

答えて

0

使用コーラブル:

その後、
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; 
    } 
} 

あなたのエグゼキュータから:

Future<Molecule > future = executor.submit(yourTask); 
Molecule yourValue = future.get(); 
+0

はどうもありがとうございました! – lochi

1

一つの簡単なテクニックは、あなたの実行可能にJobListenerのいくつかの種類を追加するには、次のようになります。

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

Callable rが必要ですRunnableよりather。 Callableは結果を返します。

次のようにあなたはそれを得ることができます。

Future<YourExpectedResult> future = executor.submit(new YourCallable()); 
YourExpectedResult result = future.get();