JAva学習ノート1017---マルチスレッド

8657 ワード

1.*1つのプログラムの実行後に少なくとも1つのプロセスがあり、1つのプロセスには複数のスレッドを含めることができますが、少なくとも1つのスレッドを含める必要があります.*
    2.スレッドは、プログラム内で独立した同時実行ストリームです.
 
スレッドを実装する方法1:
Threadクラスの継承スレッドクラスの作成
 
        1.Threadクラスのサブクラスを定義し、そのクラスのrunメソッドを書き換えます.このrunメソッドのメソッドボディは、テーブルスレッドの代わりに完了するタスクです.
従ってrun法をスレッド実行体と呼ぶことが多い.
2.Threadサブクラスのインスタンスを作成し、スレッドオブジェクトをタイムリーに作成します.
3.スレッドオブジェクトのstartメソッドでスレッドを開始します.

   
   
   
   
  1. package bin; 
  2. public class FirstThread extends Thread 
  3.     private int i; 
  4.     // run  
  5.     public void run() 
  6.     { 
  7.         for(;i < 100;i++) 
  8.         { 
  9.             /* Thread , getName() 。 
  10.                  , this  
  11.                 Thread getName() 。 
  12.             */ 
  13.             System.out.println(getName() + " " + i);     
  14.         }    
  15.     } 
  16.         public static void main(String[] args) 
  17.         { 
  18.             for(int i=0;i < 100; i++) 
  19.             { 
  20.                 // Thread currentThread  
  21.                 System.out.println(Thread.currentThread().getName() + " " + i ); 
  22.                 if(i == 20
  23.                 { 
  24.                     //  
  25.                     new FirstThread().start(); 
  26.                     //  
  27.                     new FirstThread().start(); 
  28.                 } 
  29.             }    
  30.         }    
  31. }
  32. Thread.currentThread():currentThread Thread , 。 getName(): Thread , 。


:Thread-0 Thread-1 i , i FirstThread , FirstThread , Thread-0 Thread-1 。


スレッドを実装する方法2:Runnableインタフェースを実装してスレッドクラスを作成する
1.Runnableインタフェースの実装クラスを定義し、スレッドのスレッド実行体であるrunメソッドを書き換える.
2.Runnableインプリメンテーションクラスのインスタンスを作成し、このインスタンスをThreadのtargetとしてThreadオブジェクトを作成します.このThreadオブジェクトこそ真のスレッドオブジェクトです.
        3.スレッドオブジェクトのstartメソッドを呼び出してスレッドを開始します.
例:
 

  
  
  
  
  1. // Runnable  
  2.   SecondThread st = new SecondThread(); 
  3.   // Runnable Thread target Thread ,  
  4.   new Thread(st);// new Thread(st," 1");  

注意:
RunnableオブジェクトはThreadオブジェクトのtargetとしてのみ,Runnable実装クラスに含まれるrunメソッドはスレッド実行体としてのみである.実際のスレッドオブジェクトは依然としてThreadインスタンスであり、このThreadスレッドがtargetのrunメソッドを実行する責任を負うだけである.JAva言語のThreadはRunnableオブジェクトのrunメソッドをスレッド実行体として使用する必要があります.
例:

  
  
  
  
  1. package bin; 
  2. public class SecondThread implements Runnable 
  3.     private int i; 
  4.     public void run() 
  5.     { 
  6.         for(;i<100;i++)  
  7.         { 
  8.             System.out.println(Thread.currentThread().getName() + " " + i);  
  9.         } 
  10.     }    
  11.     public static void main(String[] args) 
  12.     { 
  13.         for(int i =0;i<100;i++) 
  14.         { 
  15.             System.out.println(Thread.currentThread().getName() + " " + i);  
  16.             if(i==20
  17.             { 
  18.                 SecondThread st = new SecondThread(); 
  19.                 new Thread(st," 1").start();   
  20.                 new Thread(st," 2").start();   
  21.             }    
  22.         }    
  23.     } 
  24. /* : i , Runnable
  25. 。 : Runnable target,
  26. target, ( target ) 。 */

FirstThreadとSecondThreadのrunメソッドを比較します.
Threadを継承するときに現在のスレッドオブジェクトを取得するのは簡単です.thisを直接使用すればいいですが、Runnableインタフェースを実装するときに現在のスレッドオブジェクトを取得するにはThreadを使用する必要があります.CurrentThread()メソッド.
注意:
    1.起動スレッドはrunメソッドではなくstartメソッドを使用し、スレッドオブジェクトのrunメソッドを呼び出さないでください.startメソッドを呼び出してスレッドを起動すると、runメソッドはスレッド実行体として処理されますが、runメソッドを直接呼び出すとrunメソッドは直接実行され、runメソッドが戻る前に他のスレッドは同時実行できません(システムはスレッド実行体ではなく通常のオブジェクトとして実行されます).
    2.デッドステートのスレッドに対してstart()メソッドを呼び出さないでください.プログラムは、新規ステータスのスレッドに対してのみstart()メソッドを呼び出すことができます.新規ステータスのスレッドに対してstart()メソッドを2回呼び出すのも間違っています.
 
 
 
本文は“javaプログラム猿のブログ”のブログから出て、転載して作者と連絡してください!