JavaのスレッドThreadの3つの方法と比較


紹介する
マルチスレッドの主な役割は、cpuの資源を十分に利用することです。シングルスレッド処理は、ファイルのロード中にプロセッサがアイドル状態になりますが、総実行時間内にも組み込まれています。シリアル実行の切り出し時間は、1カットあたりの時間と同じです。マルチスレッド処理では、ファイル読み込みと差分処理中です。
一、Javaがマルチスレッドを実現する3つの方法
1.Threadの継承
Thread継承により、run方法を書き換えてマルチスレッドを実現した事例は以下の通りである。

public class ThreadPattern extends Thread {
    @Override
    public void run() {
        System.out.println("  Thread      "+Thread.currentThread().getName());
    }
}
//   
public void threadTest() throws ExecutionException, InterruptedException {
        ThreadPattern pattern = new ThreadPattern();
        pattern.start();
    }
2.Runnableインターフェースの実現
Runableの実現類はThreadの構造パラメータとしてマルチスレッドを実現しています。例は以下の通りです。

public class RunnablePattern implements Runnable{
    @Override
    public void run() {
        System.out.println("  Runnable  ,      "+Thread.currentThread().getName());
    }
}
//   
public void runnableTest() throws ExecutionException, InterruptedException {
        RunnablePattern runnablePattern = new RunnablePattern();
        Thread thread = new Thread(runnablePattern);
        thread.start();
    }
3.Callableインターフェースを実現する
Callableインターフェースを実現してコール方法を書き直し、FutureTaskに包装してからThreadに包装します。本質は全部Runnableインターフェースを実現します。実例は以下の通りです

public class CallablePattern  implements Callable {
    @Override
    public Object call() throws Exception {
        System.out.println("  Callable  ,      "+Thread.currentThread().getName());
        return "1";
    }
}
//   
public void callableTest() throws ExecutionException, InterruptedException {
        CallablePattern callablePattern = new CallablePattern();
        FutureTask<String> futureTask = new FutureTask<>(callablePattern);
        new Thread(futureTask).start();
    }
二、三種類の使い方の対比をまとめます。
1、Thread:継承の方式は、javaの単一継承メカニズムによる。他のクラスを引き継ぐことができないと、使い勝手が悪くなります。
2、Runnable:インターフェースの実現は、Thread類よりも柔軟で、単一継承の制限がない。
3、Callable:Threadとrunnableはいずれもrun方法を書き換えて、そして戻り値がない、Callableはコール方法を書き直して、戻り値があります。スレッドの実行が完了したかどうかはFutureTaskクラスを通じて判断します。また、スレッドのコードをThreadクラスに直接置かない場合は、通常はThreadクラスでスレッドを起動します。
4:Thread類はRunnableを実現し、CallableはFutureTaskにパッケージ化され、FutureTaskはRunnable Futureを実現し、Runnable FutureはRunnableを実現します。
ここで、JavaのスレッドThreadの3つの方法と対比する文章を紹介します。JavaスレッドのThreadの内容については、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。