マルチスレッド化の 4 つの方法 - Java スレッド作成

Javaで表面上にスレッドを作成する方法は4つありますが、実際には2つあると言えます。

1. Thread クラスを使用して、run メソッドを書き換えます。もう一度 start を呼び出します。

2. Runable インターフェイスを実装して、Thread クラスを通じて run メソッドを書き換えます。Runable オブジェクトを Thread クラスのコンストラクターに渡し、Thread クラスの開始を呼び出します。

3. Thread クラスを通じて、FutureTask インターフェイスと Callable インターフェイスを通じて run メソッドを書き換え、インスタンス オブジェクトをThread クラス構築メソッドに渡し、Thread クラスの開始を呼び出します。

4. ThreadPool を通じてスレッドを作成します。実行ロジックのタイミングを制御するには、Callbale オブジェクトまたは Runable オブジェクトをスレッド プールに送信する必要があります。

本質はスレッドとスレッドプールで遊ぶことであることがわかります。次のコードは実際的な例です。

@Slf4j
public class Thread01 {
    public static void main(String[] args) throws Exception{
        //普通Thread
        Thread t1 = new Thread("t1"){
            @Override
            public void run() {
                log.info("普通new Thread run");
            }
        };
        t1.start();

        //实现Runbale接口
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                log.info("实现runable接口 run");
            }
        };
        new Thread(runnable,"t2").start();;


        //实现callable接口
        FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                log.info("实现callable接口 run");
                return 100;
            }
        });
        new Thread(task,"t3").start();
        log.info("执行结果:{}",task.get());

        //线程池方式
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.submit(runnable);
        FutureTask<String> task1 = new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "这是callable";
            }
        });
        executorService.submit(task1);
        log.info("线程池执行结果:{}",task1.get());
    }
}

結論は:

 Thread によるスレッドのネイティブ作成は、実際のプロジェクトではまれです。その実行ロジックは現在のスレッドでのみ使用でき、強力なバインド関係があるためです。一般に、Runable は記録ロジックを実装するために使用され、その後 Thread に渡されます。その場合、Callable メソッドは Runable よりも実行結果を返します。複数のスレッド間で実行結果が必要になる場合があるため、実際のコード アプリケーションをスレッド間通信に使用できます。スレッド プールの方法は主に、コンテキストの切り替えを減らし、リソースをより柔軟にすることです。submit メソッドが提供されているため、内部実装に注意を払う必要がなく、タスクを送信するだけで済みます。通常、大きなファイルのデータ処理などのタスクに使用されます。

おすすめ

転載: blog.csdn.net/weixin_42740540/article/details/124120935
おすすめ