JAva深化——マルチスレッドを実現する第3の方式(Callableインタフェースを実現し、callメソッドを書き換える)
1387 ワード
スレッドを作成する方法の2つについて説明しました. 1)Threadクラスの継承 2)Runnableインタフェースの実現 この2つの方法には、次のような欠点があります. 1)戻り値なし 2)汎用型はサポートされていない 3)異常は処理しなければならない
マルチスレッドを実現する第3の方法: Callableインタフェースを実現し、callメソッドを書き換える Callable機能の強化 1)Futureインタフェースはjava.util.concurrentパッケージにあり、具体的なRunnable、Callableタスクの実行結果を取り消すことができる.
(cancelメソッド、このタスクの実行をキャンセルしようとします) クエリが完了したかどうか(isDoneメソッド)、結果の取得(getメソッド、完了待ち、結果の取得)など. 2)FutureTaskはFutureインタフェースの唯一の実装クラスである
3)FutureTaskはRunnable,Futureインタフェースを同時に実現した.Runnableとしてスレッドによって実行することもできます.
またFutureとしてCallableの戻り値を得ることもできます.
コードの例:
マルチスレッドを実現する第3の方法: Callableインタフェースを実現し、callメソッドを書き換える Callable機能の強化 1)Futureインタフェースはjava.util.concurrentパッケージにあり、具体的なRunnable、Callableタスクの実行結果を取り消すことができる.
(cancelメソッド、このタスクの実行をキャンセルしようとします) クエリが完了したかどうか(isDoneメソッド)、結果の取得(getメソッド、完了待ち、結果の取得)など. 2)FutureTaskはFutureインタフェースの唯一の実装クラスである
3)FutureTaskはRunnable,Futureインタフェースを同時に実現した.Runnableとしてスレッドによって実行することもできます.
またFutureとしてCallableの戻り値を得ることもできます.
コードの例:
public class Test {
public static void main(String[] args) throws Exception {
//
MyCallable mc=new MyCallable();
/**FutureTask Runnable,Future 。
* Runnable , Future Callable
*/
//
FutureTask task=new FutureTask<>(mc);// FutureTask runnable
Thread t=new Thread(task);
t.start();
System.out.println(" :"+task.get());
System.out.println(" :"+task.isDone());
}
}
// Callable , call
class MyCallable implements Callable {
@Override
public Object call() throws Exception {
String [] str= {"apple","pear","banana","orange","grape"};
int i=(int)(Math.random()*5);
return str[i];
}
}