2016-08-10 3 views
2

ExecutorServiceのは、二つのオーバーロードされたメソッドIは、以下のコードを書くときにクラスRunnable又はCallableが作成されるインスタンスのうちラムダ式を渡すときにどのオーバーロードされたメソッドが呼び出されるかを定義する方法は?

  1. ExecutorService.submit(Callable)
  2. ExecutorService.submit(Runnable)

を有しています。ラムダ式を使用しながら、これはRunnableのインスタンスである場合

executor.submit(()->System.out.println("Running in : " + Thread.currentThread().getName())); 

は、どのように私はExecutorServiceCallableまたはその逆のインスタンスを渡すのですか?

+1

文字列を出力する代わりに値を返す必要があります。返す必要があります。future.getを呼び出すスレッドから結果を出力する必要があります。 – matt

+0

あなたが使用する方法を区別する別の方法は、カーストにあります。 http://ideone.com/LXmdsq – matt

答えて

4

ラムダは値Callable.call()が必要な値を返さないので、Runnableです。

+0

これをプログラムで証明する方法はありますか? –

+3

私はコンパイラが間違ったコードをコンパイルしないので、本当にうまくいくと思います。値を返す 'Runnable'や値を返さない' Callable'を作成してみてください。 – Kayaman

+0

この質問は本当に重複していますか?関連リンクが 'Runnable'と' Callable'に関する質問に答えなかった –

1

呼び出し可能なラムダを取得するには、何かを返す必要があります。

executor.submit(() -> {great_calculation(); return calculated_value;}); 
関連する問題