スレッドを作成するためのJava

スレッドを作成するための4つの方法があります。

1、継承Threadクラス(真の意味でのスレッドのクラス)は、Runnableインタフェースを達成することです。

2、Runnableを実装し、かつそのrunメソッドをオーバーライドします。

図3は、エグゼキュータフレームワークを使用してスレッドプールを作成します。エグゼキュータのフレームワークは、スレッドプールで提供jucを達成することです。

4、呼び出し可能なインターフェイスを達成するために、コールオーバーライドメソッド

 

呼び出し元のスレッドのstart():スレッドを開始し、(適切な実行を呼び出す)する方法

ThreadクラスのThreadクラスから継承されます、あなたは直接スレッドを開始するために、startメソッドを呼び出すことができます(静的を使用してもリソースを共有することができます)。スレッド(オブジェクト)のみ()を起動し、一度に行うことができ、(オブジェクトを実装Threadクラスを実行することはできません)へスレッドを開始します。

startメソッドは、Runnableインタフェースクラスを実装するために呼び出された後、再度、Threadクラスのパッケージを使用する必要があります。(三のThreadオブジェクトラッパークラスのオブジェクトは、リソースの共有を実現します)。

そして、ロックの使用に注意を払うとスレッドを使用して同期。(がちな共有リソースのセキュリティスレッドへのマルチスレッドアクセス)


 

一般的に、一般的には秒です。

*、Runnableインタフェースは、次のような利点があります。

継承の制限を回避するため*①点、クラスは複数のインタフェースを継承することができます。

*②リソースの共有に適し

 

1、継承のスレッド

// サブクラスを作成しますが、スレッドの継承
クラス DemoThreadが拡張スレッド{
     公共 RUN(){
         // RUN 2. Threadクラスの書き換え可能()メソッドを、子スレッドの機能を実現するための方法を完了する
        ためにint型 I 1 =; I ++; Iは= 10 < ){ 
            System.out.printlnは(にThread.currentThread()のgetName() + ":" + I); 
        } 
    } 
} 


パブリック クラスTestThread { 

    公共 静的 ボイドメイン(文字列[]引数を){
         // オブジェクトのサブクラスを作成 
        DemoThreadを= S 新しい新しいDemoThread();
         //4.呼び出し元のスレッド開始():このスレッドが開始され、適切なrun()メソッドの呼び出し
        s.startを(); 
        
        // メインスレッドには、以下の続く
        ためにint型 ;;私は10 = <I ++はI = 1。{)
            システム。 out.printlnを(I); 
        } 
    } 
}
/ * スレッドの一般的な方法: 
 * 1.startは():スレッドを起動し、対応するrun()メソッドを実行
 * 2.run():サブスレッドはrun()メソッド内のコードを実行する
 * 3.currentThread() :現在のスレッドの呼び出し、静的
 このスレッドの名前を取得します:()*の4.getNameを
 )(*の5.setNameを:このスレッドの名前を設定
 )(*の6.yieldを:このメソッドは右のCPUを解放するために、現在実行中のスレッドと呼ばれています
 * 7.join():呼び出し元のスレッドがを続行する前に完了するために、次のスレッドの後に実行するために待っている
 * 8.isAliveは():現在のスレッドがまだ生きているかどうかを判断
 明示的にスリープ状態に現在のスレッドを許可する:* 9.sleep(長い1) 1ミリ秒
 * 10スレッド通信:待機()(通知)のnotifyAll()
 * 
 *設定スレッドの優先順位
 * getPriorityは():スレッドの優先順位値を返し
 、スレッドの優先順位を変更する:* setPriorityを(INT newPriority)
 * * /

 マルチスレッドの小さなデモ:

/ * 2つのサブスレッドを作成しているので、1〜100の間に偶数前記出力、1-100の間の奇数の別の出力* / 

クラススレッド1 延びスレッド{
     公共 ボイドRUN(){
         INT I = 1; I <= 100; I ++は){
             IF(I%2 == 0 
                のSystem.out.println(にThread.currentThread()のgetName() + ":" + I); 
        } 
    } 
} 

クラススレッド2 延びスレッド{
     公共 ボイドRUN (){
         INT I = 1; I 100 = <; I ++は){
             IF(I = 2%0!
                System.out.println(にThread.currentThread()のgetName()。 + ":" + I)。
        } 
    } 
} 


パブリック クラスTestThread {
     公共 静的 ボイドメイン(文字列[]引数){ 
        スレッド1、S1 = 新しいスレッド1()。
        スレッド2 S2 = 新しいスレッド2(); 
        
        s1.start(); 
        s2.start(); 
        
        // 继承于スレッド类的匿名类的对象
 //         新しいスレッド(){
 //             ます。public void実行(){
 //                 ための(int型I = 1;私は= 100 <;私は++){
 //                     もし(I%2 == 0)
//                         するSystem.out.println(。にThread.currentThread()のgetName()+ ":" + I)。
//                 }
 //             }
 //         } .start();
// 
//         新しいスレッド(){
 //             ます。public void実行(){
 //                 ための(int型I = 1;私は= 100 <;私は++){
 //                     もし(!I%2 = 0)
 //                         のSystem.out .println(にThread.currentThread()のgetName()+ ":" + I)。
//                 }
 //             }
 //         } .start(); 
    } 
}
コードの表示

 

 2、の方法によりRunnableを実装

/ * 、偶数間1-100二つのサブスレッドを作成する* / 

クラスはスレッド1 を実装したRunnable {
     公共 ボイドRUN(){
         INT I = 1; I ++は、私は= 100 < ){
             IF(I%2 ==を0 
                のSystem.out.println(にThread.currentThread()のgetName() + ":" + I); 
        } 
    } 
} パブリック クラスTestThread {
     公共 静的 ボイドメイン(文字列[]引数){ 
        スレッド1 S = 新しい新しいスレッド1() ; 
        
        // スレッドを起動するには、()の開始を呼び出す必要があります
        スレッドT1 = 新しいスレッド(S)
        t1.start(); 
        
        スレッドT2 = 新しいスレッド(S)
        t2.start(); 
    } 
}

 

 
 
Runnableを与スレッド
1、联系:公共ThreadクラスはRunnableを実装します
2、何が良い方法はありますか?相続のより良い方法を達成する方法
     1)Javaの単一継承の制限を回避
     2)複数のスレッドは、リソース(またはデータ)で動作する場合、より適切な方法を使用することは、達成するために
 
 
 
参考と勧告:

おすすめ

転載: www.cnblogs.com/lisen10/p/10970045.html