JAVAマルチスレッド学習ノート<1>スレッドとは


【プロセスとスレッド】
1、オペレーティングシステムは1つのプログラムを実行する時、自動的に1つの“プロセス”を創立して、このプロセスの中で、少なくとも1つのスレッド(このスレッドはメインスレッドと呼ばれます)を含んで、プログラムの入り口とします.
2、オペレーティングシステムの実行中、メモリを共有しない多くの「プロセス」が発生する.各プロセスが占有するメモリは、このプロセスの異なる「スレッド」によって共有することができます.また、これらのスレッドは、このメモリを共有するだけでなく、各スレッドに独自のメモリ領域であるスレッドスタックを持つことができます.これは、スレッドが確立されたときにオペレーティングシステムが割り当てられ、スレッドデータを保存するために使用されます.
3、スレッドは常にあるプロセスに属し、プロセス内の複数のスレッドはプロセスのメモリを共有する.
4、プロセスが複数のスレッドに分割されると、これらのスレッドは同時実行できます(本当の意味での同時実行ではなく、スレッドスケジューリングによる仮想化です.詳細は関連オペレーティングシステムのチュートリアルを参照してください).
【JAVAスレッド】
1、Javaは純粋なオブジェクト向け言語であるため、Javaのスレッドモデルもオブジェクト向けであり、JavaはThreadクラスを通じてスレッドに必要な機能をすべてカプセル化している.
2、自分のスレッド実行関数を実行したい場合は、Threadクラスのrunメソッドを上書きします.つまり、Threadクラスを継承し、クラス内のrun()メソッドを書き換え、run()に実行するコードを書きます.次のようになります.
public class MyThread extends Thread
{
	
	public void run()
	{
		
         //    
		
	}
}

3、実行時にMyThreadをインスタンス化し、start()メソッドを呼び出す.startメソッドはスレッドの作成を担当し、startメソッドを呼び出すと、スレッドが成功すると、Threadクラスのrunメソッドが自動的に呼び出され、コードの実行が開始されます.次のようになります.
public static void main(String[] arg0)
{
	MyThread myThread = new MyThread();
        myThread.start();
}

4、Threadクラスに加えて、Javaクラスがスレッドクラスとして使用できるかどうかを識別するインタフェースRunnableがあります.このインタフェースには抽象的な方法run、すなわちJavaスレッドモデルのスレッド実行関数しかありません.スレッドクラスの唯一の基準は、このクラスがRunnableインタフェースのrunメソッドを実装しているかどうかです.つまり、スレッド実行関数を持つクラスがスレッドクラスです.
5、Threadクラスを継承することによってスレッドを確立することは、実現が容易であるが、Javaはマルチ継承をサポートしていないため、このスレッドクラスがThreadを継承すれば、他のクラスを継承することはできない.したがって,JavaスレッドモデルはRunnableインタフェースを実装することによってスレッドを確立し,スレッドクラスはThreadクラスではなく必要に応じてトラフィックに関連するクラスを継承することができる.
6、Runnable例:
public class MyThread implements Runnable
{
	public void run()
	{
		//your code
	}	
}
public static void main(String[] args) { 
	
	MyThread myThread1 = new MyThread(); 
	MyThread myThread2 = new MyThread(); 

    Thread t1 = new Thread(myThread1); 
    Thread t2 = new Thread(myThread2); 

    t1.start(); 
    t2.start(); 
} 

【Threadクラスの構築方法】
1.Runnableインタフェースを使用する場合、Threadインスタンスを作成する必要があります.したがって、ThreadクラスでもRunnableインタフェースでもスレッドを作成するには、Threadクラスまたはそのサブクラスのインスタンスを作成する必要があります.Threadクラスの構築方法は8回再ロードされ、構築方法は以下の通りである.
public Thread();
public Thread(Runnable target);
public Thread(String name);
public Thread(Runnable target, String name);
public Thread(ThreadGroup group, Runnable target);
public Thread(ThreadGroup group, String name);
public Thread(ThreadGroup group, Runnable target, String name);
public Thread(ThreadGroup group, Runnable target, String name, long stackSize);

Runnable target
Runnableインタフェースのクラスのインスタンスを実装しました.なお、ThreadクラスはRunnableインタフェースも実装されているので、Threadクラスから継承されたクラスのインスタンスはtargetとしてこの構築方法に転送されてもよい.
String name
スレッドの名前.この名前は、Threadインスタンスの作成後にThreadクラスのsetNameメソッドで設定できます.スレッドの名前を設定しない場合、スレッドはデフォルトのスレッド名:Thread-Nを使用し、Nはスレッドが確立された順序であり、重複しない正の整数である.
ThreadGroup group
現在確立されているスレッドが属するスレッドグループ.スレッドグループを指定しない場合、すべてのスレッドがデフォルトのスレッドグループに追加されます.スレッドグループの詳細については、後述する章で詳しく説明します.
long stackSize
スレッドスタックのサイズは、CPUページの整数倍が一般的です.x 86のようなページサイズは4 KBです.x 86プラットフォームでは、デフォルトのスレッドスタックサイズは12 KBです.
2、startメソッドを呼び出す前後にsetNameを使用してスレッド名を設定できますが、startメソッドを呼び出す後にsetNameを使用してスレッド名を変更すると不確実性が発生します.
Reference:
http://www.blogjava.net/nokiaguy/archive/2009/03/07/258358.html李寧の極楽世界-JAVAマルチスレッド初心者ガイド