2016-04-14 14 views
1

Googleをたくさんしましたが、FutureTaskを使用してRunnableインターフェイスから値を返す方法が見つかりませんでした。FutureTaskを使用してRunnableインターフェイスから値を返す方法

私はFutureTaskを使用してrunメソッドの結果を返す必要があり、私は同じが呼び出し可能インターフェースを使用してアーカイブすることができますが、それは、Runnableインタフェースを使用してどのように行うことができることを知っています。

FutureTaskコンストラクタは戻り値の2番目のパラメータを受け入れます。

public FutureTask(Runnable runnable,V result) 

Vの結果にrun()メソッドの結果を割り当てる方法

FutureTask<String> futureTask=new FutureTask<String>(new Runnable() {   
     @Override 
     public void run() { 
      String outcome="Task Completed Successfully"; 
     } 
    },null); 
+1

** **このパラメータは 'run'内からは設定できません。しかし、これはまさに 'Callable'のためのものです。 'Callable'を使わないのはなぜですか? – immibis

+0

ところで、インターフェイスは何もしません。 – immibis

+0

私は呼び出し可能インターフェースを使用することができますが、あなたはRunnableをを持っている、とあなたは事前に結果を知ったときにどのような使用公共FutureTask(Runnableを実行可能な、V結果) – Dave

答えて

0

私はあなたの呼び出しでnull値が戻り値である

ExecutorService exec = Executors.newSingleThreadExecutor(new ThreadFactory() { 
    public Thread newThread(Runnable r) { 
     Thread t = new Thread(r); 
     t.setDaemon(true); 
     return t; 
    } 
}); 
Future fs = exec.submit(new Callable() { 
    public Object call() throws Exception { 
     return null;//yourObject 
    } 
}); 
fs.get();//your object 
0

を使用しています。それは"Task Completed Successfully"を返すようにするには、次のものが必要だろう:あなたはRunnableが結果を計算したい場合は

FutureTask<String> futureTask=new FutureTask<String>(new Runnable() {   
    @Override 
    public void run() { 
    } 
}, "Task Completed Successfully"); 

これは、しかし、明らかに非常に有用ではありません。

代わりにCallableを使用してください。

関連する問題