Javaマルチスレッド実現(Callableインターフェース)
4380 ワード
一、Runnableインターフェースを使用して実現されるマルチスレッドを定義することで、シングル継承の限界は回避できるが、操作結果に戻ることができず、Callableインターフェースが現れた。
二、起動スレッドjava.util.co ncurrent.FuturreTask類、このクラスは主にCallableインターフェースオブジェクトの操作を担当しています。この種類の定義構造は以下の通りです。
@FunctionalInterface
public interface Callable {
public V call() throws Exception;
}
call方法はスレッドの本体機能を実行した後、結果を返すことができ、リターンインターフェースのタイプはCallableインターフェース上の汎型によって決定される。二、起動スレッドjava.util.co ncurrent.FuturreTask類、このクラスは主にCallableインターフェースオブジェクトの操作を担当しています。この種類の定義構造は以下の通りです。
public class FutureTask<V> extends Object implements RunnableFuture<V>
FutureTask類には次のような構造があります。public FutureTask(Callablecallable)
public interface RunnableFuture<V> extends Runnable,Future<V>
Callable受信対象は、callメソッドの返却結果を取得するためです。public class MyThread implements Callable<String> {
private int ticket = 10;
@Override
public String call() throws Exception {
for(int x = 0 ;x < 10 ;x ++) {
if(this.ticket > 0) {
System.out.println(" ,ticket = " + this.ticket --);
}
}
return " ";
}
}
public class TestDemo {
public static void main(String[] args) throws Exception {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
FutureTask task1 = new FutureTask(mt1);
FutureTask task2 = new FutureTask(mt2);// call()
//FutureTask Runnable , Thread task
new Thread(task1).start();//
new Thread(task2).start();
// , FutureTask Future get()
System.out.println("A :" + task1.get());
System.out.println("A :" + task1.get());
}
}
—————————————————まとめ:1、マルチスレッドの実現には、RunnableインターフェースとThread類起動の配合に重点を置いている。2、Callableインターフェースについて、違いは戻り結果として3、FutureTask類でCallableオブジェクトを受信する。また、FutureTaskはRunnableサブクラスであるので、したがって、FutureTaskオブジェクトは、Threadクラスに呼び出され、Thread種類のstart()方法でマルチスレッドを起動することができます。