Javaマルチスレッド実装

  Javaのスレッドがよく言及されますが、実際の開発作業はめったに使用されないテクノロジーです(少なくとも私は使用しません)。以下に、いくつかの一般的なスレッド実装方法を紹介します

  1. Threadクラスを継承し、runメソッドを書き換えます

   Threadクラスを統合し、runメソッドを書き換えてスレッドを実装し、startメソッドでスレッドを開始します

  

パブリック クラス MyThread Thread {を拡張します。

    @オーバーライド
    public  void run(){
        System.out.println( "================" + new Date());
    }

    public  static  void main(String [] args){
         forint i = 0; i <10; i ++ ){
            MyThread myThread = new MyThread();
            myThread.start();
        }
    }
}

mainメソッドを実行して効果をテストします。

 

  2. Runableインターフェースを実装する

  Javaのスレッドクラスとしてのスレッド。これには、構築パラメーターとしてRunableコンストラクターがあり、Runableインターフェイスを実装することにより、スレッドをさらに実装できます。同じことは、スレッドをstartから開始することです。

/ **
 * Runableインターフェースを実装することにより
 * / 
パブリック クラス MyRunableImpl Runnableを実装します{

    プライベート文字列名。

    public MyRunableImpl(String name){
         this .name = name;
    }

    @オーバーライド
    public  void run(){
        System.out.println(name + "================" + new Date());
    }

    public  static  void main(String [] args){
         forint i = 0; i <10; i ++ ){
            MyRunableImpl myRunable = new MyRunableImpl( "myRunable" + i);
            スレッドt = 新しいスレッド(myRunable);
            t.start();
        }
    }
}

mainメソッドを実行して効果をテストします。

 

   3. FutureTaskのスレッド

  このメソッドは、2番目のメソッドに似ているか、スレッド(Runnable)構築メソッドが使用されます。違いは、Runableを自分で実装する代わりに、FutureTaskを使用することです。実装されたFutureTask

RunnableFutureインターフェースとRunnableFutureインターフェースはRunableインターフェースを統合しているため、FutureTaskを構築パラメーターとして使用してスレッドを作成することもできます。FutureTaskは2つのパラメーター化された構築メソッドをサポートします。ここでは、Future(Callable)を使用します。まず、Callableインターフェースとcallメソッドを実装する必要があるクラスを作成する必要があります。

パブリック クラス MyCallable Callable {

    プライベート文字列名。

    public MyCallable(String name){
         this .name = name;
    }

    @オーバーライド
    public Object call()例外をスローします{
        System.out.println(name + "===============" + new Date());
        名前を返す;
    }
}

テストクラス

パブリック クラスFutureTaskTest {

    public  static  void main(String [] args)ExecutionException、InterruptedException {
         forint i = 0; i <10; i ++ ){をスローします
            MyCallable myCallable = new MyCallable( "myCallable" + i);
            FutureTask futureTask = new FutureTask(myCallable);
            スレッドt = 新しいThread(futureTask);
            t.start();
            オブジェクトo = futureTask.get();
            System.out.println( "戻り値=============" + o);
        }
    }
}

mainメソッドを実行して効果をテストします。

 

 Callableインターフェースのcallメソッドは、スレッドの開始時に呼び出されます。FutureTask.get()メソッドを使用して、call()の戻り値を取得できます。getメソッドはスレッドをブロックすることに注意してください。

  4.エグゼキューターを使用してスレッドプールを作成する

  Executorsはjava jucのクラスです。これを使用してスレッドプールを作成し、これを使用してスレッドを実装できます。このメソッドにはCallable実装クラスも必要です。ここでも3番目のメソッドでクラスを使用しています。

パブリック クラスExecutorsTest {

    public  static  void main(String [] args){
        ExecutorService executorService = Executors.newFixedThreadPool(10 );
        リスト <Future <?>> list = new ArrayList <> ();
        forint i = 0; i <10; i ++ ){
            MyCallable myCallable = new MyCallable( "myCallable" + i);
            将来の送信 = executorService.submit(myCallable);
            list.add(submit);
        }
        以下のために(今後の未来:リスト){
             しようと{
                オブジェクトo = future.get();
                System.out.println( "戻り値==============" + o);
            } キャッチ(InterruptedException e){
                e.printStackTrace();
            } キャッチ(ExecutionException e){
                e.printStackTrace();
            }
        }
        executorService.shutdown();
    }
}

Executorsを使用してスレッドプールを作成し、ExecutorService.submit(Callable)がスレッドを開始します。submitメソッドはFutureオブジェクトを返し、Callable実装クラスのcallメソッドの戻り値は、そのget()メソッドを通じて取得できます。上記の操作を実行した後、ExecutorService.shutdownメソッドを呼び出す必要があります。そうしないと、メインスレッドが常に実行されます。

mainメソッドを実行して効果をテストします。

 

 上記は、複数のスレッドを作成する一般的な方法です。正しくない場合は、コメントを残してください。

 

おすすめ

転載: www.cnblogs.com/xiupan/p/12702267.html