Javaのスレッドを作成するには(a)の4つの方法をマルチスレッド

1.は、同時並列何ですか

マルチスレッドを学ぶためには、まず、同時並列であるかを理解しなければなりません

平行:2つ以上のイベントを指し、同時に(同時に)生じます。

同時実行は:中二つ以上のイベントを指し、同じ期間内に発生しました。

 

2.プロセス、スレッドとは何ですか

プロセス:

プロセスは、プログラム実行中のインスタンスです。

プロセスは、プロセスが複数のスレッドを開くことができ、ある容器のスレッドです。

このようなブラウザを開くと、開いたAワードその他の動作は、プロセスを作成します。

 

スレッド:

スレッドは、プロセス内の独立した実行ユニットです。

このプロセスは、同時に複数のスレッドを実行することができます。

例えば、プロセスは、病院、スレッドが登録され、治療、支払い、薬やその他の事業活動として理解することができます

 

マルチスレッド:複数のスレッドを同時に。

 

 

スレッドを作成します3。

Javaスレッドが作成され、4つの方法があります。

リットルのThreadクラスの継承

lはRunnableを実装します

リットルのリアライズ呼び出し可能インターフェース

リットルのスレッドプール

3.1。Threadクラスの継承

3.1.1手順1:カスタム・スレッド・クラスを作成します。

com.creatTheraパッケージ変更のため、

輸入java.util.Date; 

/ * * 
 * @Auther:lanhaifeng 
 * @date:2019年11月20日午前9時20分0020 
 * @description:マルチスレッドの継承Threadクラスが実装
 * @statementを:
 * / 
パブリック クラスはMyThreadスレッド{延び

    公共 ボイドRUN(){
         ためにINT I = 0 ; I < 10 ; I ++ ){ 
            システム。OUT .println(" MyThread実行中のスレッド:" + I); 
        } 
    } 

    パブリック 静的 ボイドメイン(文字列[]引数){
        MyThreadはMyThread = 新しい新規; MyThreadを()
        myThread.start(); 
        のためのINT I = 0 ; I < 10 ; I ++ ){ 
            システム。OUT .println(" メインスレッドが実行している:" + I); 
        } 
    } 
}

次のような結果の実装は次のようになります。

 

3.2。実装Runnableを

3.2.1ステップ1:、Runnableインタフェースを実装するカスタムクラスを作成します。

com.creatTheraパッケージのペナルティ; 

/ * * 
 * @Auther:lanhaifeng 
 * @date:2019年11月20日午前9時32 0020 
 * @description:実行可能なスレッドを作成するために、インターフェイスを実装
 * @statement:
 * / 
パブリック クラスMyRunable実装Runnableを{ 

    公共 ボイドRUN (){
         INT I = 0 ; I < 10 ; I ++ ){ 
            システム。OUT .println(" myRunnable実行中のスレッド:" + I); 
        } 
    } 

    // テストスレッド
    パブリック 静的 ボイドメイン(文字列[]引数) {
        スレッドスレッド = 新しいスレッド(新しいMyRunable()); 
        thread.start(); 
        INTは iは= 0 ; I < 10 I ++; {)
            システム。アウト .println(" 主线程正在执行:" + I)。
        } 
    } 
}

次のような結果の実装は次のようになります。

 

3.3。呼び出し可能インターフェースを実装

3.3.1。FutureTaskの紹介

次のように呼び出し可能な必要性のヘルプFutureTaskクラスの実行は、FutureTaskクラスの構造は次のとおりです。

 

将来のインタフェース:

タスクが完了したかどうかを確認します。isDone()

作業を中断することができます(キャンセル)

タスクの実行結果を得ることができます。get()

3.3.2ステップ1:呼び出し可能インターフェースを実装するカスタムクラスを作成します。

com.creatTheraパッケージ変更のため、

インポートしているjava.util.concurrent。 * ; 

/ * * 
 * @Auther:lanhaifeng 
 * @date:2019年11月20日9時41 0020 
 * @description:スレッドを作成するための呼び出し可能インターフェースを実装して
 呼び出し可能インターフェース:* @statement戻り値がある
 * / 
パブリック クラス MyCallnable実装呼び出し可能<文字列> { 

    公共の文字列()の呼び出しが例外{スロー
         のためにint型 I = 0 ; I < 10 ; I ++ ){ 
            システム。OUTの(.println myCallableスレッドが実行されます。 + I); 
        } 
        リターン " MyCallabeスレッドを終了する" ; 
    } 

    // テスト
    パブリック 静的 ボイドメイン(文字列[]引数){
         // オブジェクトがfuturetask作成 
        FutureTask、<文字列> = FutureTask 新しい新しい FutureTask、<文字列>(新しい新しいMyCallnableを());
         //は、スレッドオブジェクトを作成着信FutureTask 
        スレッドのスレッド= 新しい新しいスレッド(FutureTask); 
        Thread.start(); 
        のためのINT I = 0 ; I < 10 ; I ++ ){ 
            システム。OUT .println(" メインスレッドが実行されています:"+ I)。
        } 
    } 
}

図は次のような結果を操作します:

 

3.4スレッドプール-Executor

3.4.1。スレッドプールスレッドのクラス図

エグゼキュータ・インタフェース

  実行(Runnableを実行可能な)方法であって、タスクを実行するコードが宣言します

ExecutorServiceのインタフェース:

  エグゼキュータ・インターフェースの継承、宣言方法:提出、invokeAll、invokeAnyやシャットダウンなど

抽象クラスAbstractExecutorService:

  すべてのメソッドは、基本的に宣言されたExecutorServiceのをExecutorServiceのインターフェースを実現します

ScheduledExecutorService接口:

  ExecutorServiceの継承されたインターフェイスのメソッド宣言スケジュールされたタスク

ThreadPoolExecutor类:

  クラスAbstractExecutorServiceを継承、提出し、実行し得る、シャットダウン、shutdownNowの方法

ScheduledThreadPoolExecutor类:

  ThreadPoolExecutorクラス継承、およびインターフェースはScheduledExecutorServiceの方法であって、前記を実装実装しました

執行クラス:

  すぐにスレッドプールを作成するための方法を提供するために、

3.4.2ステップ1:、Runnableインタフェースを実装するカスタムクラスを作成します。

com.creatTheraパッケージ変更のため、

インポートjava.util.concurrent.ExecutorService; 
インポートjava.util.concurrent.Executors; 

/ * * 
 * @Auther:lanhaifeng 
 * @date:2019年11月20日9時52 0020 
 * @description:使用スレッドスレッドプールを作成します
 :* @statement 
 * / 
パブリック クラスMyExecutors { 

    // 実行可能なインタフェースがサポートにのみ実行可能なスレッドプールとコーラブル実装
    クラスMyRunnableを実装し、実行可能な{
         公共 のボイド{)RUN(
             のためにint型 I = 0 ; I < 10 ; I ++ ) { 
                システム。OUT .println("myRunnableスレッド実行されている:" + I); 
            } 
        } 
    } 

    // テストスレッドプール使用スレッド作成
    パブリック 静的 ボイドメイン(文字列[]引数を){
         // 1.エグゼキュータ使用してスレッドプールを作成 
        ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPool(10 )を;
         // 実行の2スレッドプールのスレッド、支持体のみ実行可能なスレッドプール、呼び出し可能 
        executorService.execute(新しい新しいMyRunable());
         // 3.主糸ループ印刷
        のためにINT I = 0 ; I < 10 ; I ++ ){ 
            システム。OUT.println(" 主メインスレッドが実行されている:" + I); 
        } 
    } 

}
結果を達成するため、次のとおりです。

3.5。まとめ

3.5.1。インターフェースを実装し、Threadクラスの比較を継承

Lは、同じリソースを共有するためのプログラムコードを複数のスレッドに同じインタフェースに適しています。

Javaのインタフェースリットルで、単一継承の制限は回避します。

コードインターフェースLは、複数のスレッドで共有され、コードの独立したスレッドもよいです。

リットルのスレッドプールのスレッドが唯一の継承Threadクラスに直接、Runableまたは呼び出し可能インターフェースを実現するためにはない置くことができます。

拡張:

Javaでは、毎回のプログラムは、少なくとも二つのスレッドを実行するために開始します。一つは、メインスレッド、ガベージコレクションスレッドです。

3.5.2。Runnableを、呼び出し可能インタフェースは、比較します

同じポイント:

両方のインターフェイスがlです。

Lは、マルチスレッド・プログラムを作成するために使用することができます両方。

両方リットル必要)が(Thread.startを呼び出すスレッドを開始します。

違い:

Lは、実行結果を返すために呼び出し可能インタフェーススレッドを実装;、Runnableインタフェース実現のスレッドが結果を返すことができません。

L呼び出し可能呼び出しインタフェース()メソッドは、許可例外をスローし、例外の研磨実行のRunnableインターフェース()メソッドを許可せず。

呼び出し可能インターフェースのスレッドがFuture.cancelが実行をキャンセル呼び出すことができ、およびスレッドはRunnableを実装できませんリットルを実現

注意点:

結果の実装が返された呼び出し可能インターフェースのサポートは、「将来の成績を得るために、メインスレッドまでFutureTask.get()メソッドの実装で、このメソッドはブロックを呼び出すために、この時間が必要、このメソッドを呼び出していない場合は、メインスレッドはブロックされません!

おすすめ

転載: www.cnblogs.com/zeussbook/p/11895829.html
おすすめ