Javaのマルチスレッドいくつかの実装

1.スレッドクラスの継承、runメソッドオーバーライド
2.対象スレッドとしてRunnableを、オーバーライドrunメソッド、オブジェクト実装例のRunnableインタフェースの実装クラスのコンストラクタを実装
3.呼び出し可能とFutureTaskを通してスレッドを作成し、
4で、スレッドプールを作成スレッド(すでに述べた1)

結果を返す方法はありません、runメソッドを書き換えることで、戻り値がvoidの実施形態を実行している、ということなし戻り値単純な理由:上記の二種類のクラスに起因することができる 
呼び出し可能で、値を返します。クラスに起因することができ、後者二つはインターフェースメソッドが実現される呼び出し、戻り値がオブジェクトであるため、結果は、対象オブジェクトに戻すことができます

オプション1:スレッドThreadクラスの継承の実装は次のよう:

パブリック クラス ThreadDemo01 延びスレッド{
     パブリックThreadDemo01(){
         // 書き込みサブクラスコンストラクタはデフォルトができる
    }
     公共 ボイド{)を実行し(
         // 自分のねじコード準備
        するSystem.out.printlnを(にThread.currentThread()のgetName ()); 
    } 
    公共の 静的な 無効メイン(文字列[]引数){ 
        threadDemo01 threadDemo01 = 新しい新しいthreadDemo01(); 
        threadDemo01.setName( "私は、カスタムスレッド1" ); 
        threadDemo01.startを();        
        のSystem.out.printlnを(にThread.currentThread()のtoString());   
    }
}

 

プログラムの結果: 
スレッド[メイン、5、メイン] 
私は、カスタムスレッド1でした

スレッド実装2、Runnableインタフェースを実装することで、インタフェースクラスとして実装実装インスタンスの実行方法は、スレッドを開始する開始を呼び出す()メソッドによって、パラメータ化コンストラクタスレッドのパラメータとしてターゲットスレッド

パブリック クラスThreadDemo02 { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        System.out.printlnは(にThread.currentThread()のgetName()。)。
        スレッドT1 = 新しいスレッド(新しいMyThread()); 
        t1.start(); 
    } 
} 

クラス MyThreadは実装のRunnable { 
    @Override 
    公共 ボイドラン(){
         // TODO自動生成方法スタブ 
        のSystem.out.println(にThread.currentThread()のgetName()+ " - >我是通过实现接口的线程!实现方式」); 
    }    
}

 

プログラムの結果: 
メイン 
スレッド0-> Iは、インターフェイスを実装したスレッドの方法によって達成されます!

スレッド実装3:呼び出し可能とFutureTaskによって作成されたスレッド 
:呼び出し可能インタフェースの実装クラスを作成し、呼び出し方法の実装 
B:FutureTaskオブジェクトが呼び出し可能オブジェクトをカプセル化FutureTask包装呼び出し可能オブジェクトを使用して、実装呼び出し可能な実装クラスを作成するために、呼び出し方法を戻り値 
cが:FutureTaskオブジェクトを使用して、ターゲット・スレッドオブジェクトを作成し、スレッドを開始 
D:戻り値の子スレッドの実行終了を取得するために呼び出すFutureTaskオブジェクトのget()を

パブリック クラスThreadDemo03 { 

    / ** 
     * @paramの引数
      * / 
    パブリック 静的 ボイドメイン(文字列[]引数){
         // TODO自動生成方法スタブ

        呼び出し可能 <OBJECT> oneCallable = 新しいチケット<オブジェクト> (); 
        FutureTask <オブジェクト> oneTask = 新しい FutureTask <オブジェクト> (oneCallable)。

        スレッドt = 新しいスレッド(oneTask)。

        System.out.println(にThread.currentThread()のgetName()。)。

        t.start(); 

    } 

} 

クラスチケット<OBJECT> 用具呼び出し可能<OBJECT> { 

    // オーバーライドメソッド呼び出し
    @Override
     パブリックオブジェクト呼び出しは()スロー例外{
         // TODO自動生成されたスタブメソッド 
        のSystem.out.println(にThread.currentThread()。関連項目GetName()+を「 - > IはFutureTask呼び出し可能インタフェーススレッドによってパッケージを実装することによって達成される」);
         戻り NULL ; 
    }    
}

 

プログラムの結果: 
メイン 
スレッド0->私はインターフェイススレッドを実装することにより、FutureTask呼び出し可能ラッパーによって達成されます

スレッドの実装4:スレッドプールによってスレッドを作成

パブリック クラスThreadDemo05 { 

    プライベート 静的の int型の POOL_NUM = 10;     // 线程池数量

    / ** 
     * @param 引数
     * @throws InterruptedExceptionある 
      * / 
    パブリック 静的 ボイドメイン(文字列[]引数)をスローInterruptedExceptionあるが{
         // TODO自動生成方法スタブ 
        ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPool(5 )。  
        以下のためにint型 ; iはPOOL_NUM <I ++のをI = 0 
        {   
            RunnableThreadスレッド= 新新RunnableThread(); 

            // のThread.sleep(1000); 
            executorService.execute(スレッド);   
        } 
        // スレッドプール閉じ
        executorService.shutdownを(); 
    }    

} 

クラス RunnableThread 実装はRunnableを   
{      
    @Override 
    公共 無効RUN()   
    {   
        システム.out.println( "スレッドプールのスレッドの方法によって作成された:" "" +にThread.currentThread()のgetName()+ );   

    }   
}  

 

プログラムの結果: 
プール1スレッド3:スレッドプールモードで作成されたスレッド 
のスレッドプールモードで作成されたスレッド:プール1スレッド4 
スレッドプールモードで作成されたスレッド:プール1スレッド1 
スループール1スレッド5:スレッドは、スレッドプールモード作成 
プール-1スレッド2:スレッドプールモードで作成されたスレッド 
プール-1スレッド5:スレッドプールモードで作成されたスレッド 
のスレッドプールモードで作成されたがスレッド:プール1スレッド1 
プール1スレッド4:スレッドプールモードで作成されたスレッド 
プール-1スレッド3:スレッドプールモードで作成されたスレッド 
のスレッドプールモードで作成されたスレッド:プール1 -thread-2

ExecutorServiceのは、呼び出し可能ではエグゼキュータのフレームワークに属しています。JDK1.5に新しいスレッドを導入した結果を返し、そこに未来のインターフェース・フレームワークは、この機能は、戻り値を取得するために非常に便利ですし、属しています。 
分析を通じて知ることができ、彼はまた、呼び出し可能インターフェース、Callメソッドを実装しているため、戻り値があります。これはまさに前述の2つの分類に沿ったものです

呼び出し可能なタスクを実行した後、あなたは、Futureオブジェクトを取得し、あなたがオブジェクト呼び出し可能なタスクのリターンを得ることができるオブジェクトに入る呼び出すことができます。取得方法は、すなわち、ブロックされている:何のスレッドが結果を返さない、getメソッドは待機します。

その後、エグゼキュークラスを導入:スレッドプール、スレッドプールのリターンが達成しているExecutorServiceのインターフェイスを作成するためのファクトリメソッドのシリーズを提供します。

パブリック静的ExecutorServiceのnewFixedThreadPool(INT nthreadsの値) 
スレッドの固定された数を生成するスレッドプール。
パブリック静的ExecutorServiceのnewCachedThreadPoolは、() 
スレッドが利用可能な場合)を実行するために、キャッシュされたスレッドプールのスレッドの呼び出しは以前に構築を再利用します作成します。既存のスレッドが使用できない場合は、新しいスレッドが作成され、プールに追加されます。キャッシュから60秒間使用されていないこれらのスレッドを終了し、削除します。
パブリック静的ExecutorServiceのnewSingleThreadExecutor() 
単一スレッドエグゼキュータを作成します。
静的ScheduledExecutorService newScheduledThreadPoolパブリック(int型 
corePoolSize)が 
定期的かつ定期的なタスクの実行をサポートするために、スレッドプールを作成するには、ほとんどの場合、Timerクラスを置き換えるために使用することができます。
、ExecutoreServiceは()メソッドを提出提供コーラブル、またはRunnableをを渡し、未来を返します。バックグラウンドスレッドプールエグゼキュータが完了コーラブルを計算していない場合、この呼び出しは、計算が完了するまでFutureオブジェクトのget()メソッドはブロックします返します。

概要:
スレッドのアリのアドバイスを引用:

 

 

 


オリジナルリンクします。https://blog.csdn.net/java_zyq/article/details/87917734

おすすめ

転載: www.cnblogs.com/diandianquanquan/p/11434037.html