学習ノート2:javaでのThreadクラスとスレッドの作成
3449 ワード
スレッドはプログラム内の実行スレッドです.Java仮想マシンでは、アプリケーションが複数の実行スレッドを同時に実行できます.
各スレッドには優先度があり、高優先度スレッドの実行は低優先度スレッドより優先されます.各スレッドは、デーモンとしてマークできますか、マークできません.あるスレッドで実行されたコードが新しい
Java仮想マシンが起動すると、通常は単一の非デーモンスレッドがあります(指定したクラスのは、 非デーモンスレッドのすべてのスレッドは、runメソッドの呼び出しから戻るか、
新しい実行スレッドを作成するには、次の2つの方法があります.
1): 1つの方法は、クラスを
2) スレッドを作成する別の方法は、
Thread(Runnable target)
新しいThreadオブジェクトの割り当て
スレッド間で同じメモリユニット(コードとデータを含む)を共有し、これらの共有ユニットを利用してデータ交換、リアルタイム通信、必要な同期動作を実現することができる.
Thread(Runnable target)コンストラクションメソッドでスレッドを作成すると、CPUリソースを使用したいときにターゲットオブジェクトの順番が来ると、インタフェースのrun()メソッドが自動的に呼び出されます.したがって、同じターゲットオブジェクトを使用するスレッドでは、ターゲットオブジェクトのメンバー変数は自然にこれらのスレッドが共有するデータユニットです.
また、ターゲットオブジェクトを作成するクラスは、必要に応じて特定のサブクラスであってもよいので、Runnableインタフェースを使用すると、Threadを使用するサブクラスよりも柔軟性があります.
各スレッドには優先度があり、高優先度スレッドの実行は低優先度スレッドより優先されます.各スレッドは、デーモンとしてマークできますか、マークできません.あるスレッドで実行されたコードが新しい
Thread
オブジェクトを作成すると、新しいスレッドの初期優先度はスレッドの作成の優先度として設定され、作成スレッドがデーモンスレッドである場合にのみ、新しいスレッドがデーモンとなる.Java仮想マシンが起動すると、通常は単一の非デーモンスレッドがあります(指定したクラスの
main
メソッドが呼び出されます).Java仮想機会は、次のいずれかが発生するまでスレッドを実行し続けます.Runtime
クラスのexit
メソッドを呼び出し、セキュリティマネージャは、終了操作の発生を許可する.run
メソッド以外に伝播する異常を投げ出すかにかかわらず、実行を停止した.新しい実行スレッドを作成するには、次の2つの方法があります.
1): 1つの方法は、クラスを
Thread
のサブクラスとして宣言することである.このサブクラスは、Thread
クラスのrun
メソッドを書き換えるべきである.次に、サブクラスのインスタンスを割り当てて起動できます.public class DemoThread1 {
/**
* @author
* @param args
* date:2015-10-15
*/
public static void main(String[] args) { // main
SpeakDog dog = new SpeakDog(); //
SpeakPig pig = new SpeakPig(); //
dog.start(); //
pig.start(); //
for( int i=1;i<=10;i++){
System.out.print(" "+i+" ");
}
}
}
public class SpeakDog extends Thread { // Thread
@Override
public void run() {
for( int i=1; i<=5; i++){
System.out.print(" "+i+" ");
}
}
}
public class SpeakPig extends Thread {
@Override
public void run() {
for( int i=1;i<=7;i++){
System.out.print(" " + i +" ");
}
}
}
// JVM dog , pig , main cpu 。
// ,JVM java 。
// : , CPU 。
2) スレッドを作成する別の方法は、
Runnable
インタフェースを実装するクラスを宣言することである.次いで、クラスはrun
方法を実装する.次に、クラスのインスタンスを割り当て、Thread
の作成時にパラメータとして渡して起動することができる.Thread(Runnable target)
新しいThreadオブジェクトの割り当て
public class DemoThread2 {
public static void main(String[] args) {
Thread speakdog; // Thread
Thread speakpig; // Thread
SpeakDog dog; // dog
SpeakPig pig; // pig
dog = new SpeakDog(); //
pig = new SpeakPig(); //
speakdog = new Thread(dog); // dog
speakpig = new Thread(pig); // pig
speakdog.start(); //
speakpig.start(); //
for( int i=1; i<=10;i++){
System.out.print(" " + i +" ");
}
}
}
public class SpeakDog implements Runnable {
@Override
public void run() {
for( int i=1; i<=5; i++ ){
System.out.print(" "+ i + " ");
}
}
}
public class SpeakPig implements Runnable {
@Override
public void run() {
for( int i=1; i<=7; i++ ){
System.out.print(" "+ i + " ");
}
}
}
スレッド間で同じメモリユニット(コードとデータを含む)を共有し、これらの共有ユニットを利用してデータ交換、リアルタイム通信、必要な同期動作を実現することができる.
Thread(Runnable target)コンストラクションメソッドでスレッドを作成すると、CPUリソースを使用したいときにターゲットオブジェクトの順番が来ると、インタフェースのrun()メソッドが自動的に呼び出されます.したがって、同じターゲットオブジェクトを使用するスレッドでは、ターゲットオブジェクトのメンバー変数は自然にこれらのスレッドが共有するデータユニットです.
また、ターゲットオブジェクトを作成するクラスは、必要に応じて特定のサブクラスであってもよいので、Runnableインタフェースを使用すると、Threadを使用するサブクラスよりも柔軟性があります.
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
// Runnable target Thread ,Thread run() target.run(), JDK :
public void run() {
if (target != null) {
target.run();
}
}