Javaスレッドクラスもオブジェクトクラスであり、そのインスタンスはjava.lang.threadまたはそのサブクラスから継承されます。次の方法でJavaでスレッドを作成できます。スレッドの実行は、スレッドのstart()メソッドを呼び出すことができます。
トレッドスレッド= newスレッド();
thread.start();
上記の例では、スレッドの実行中のコードを記述しなかったため、メソッドを呼び出した後にスレッドが終了します。
スレッドの実行時に実行されたコードを作成する方法は2つあります。1つは、スレッドサブクラスのインスタンスを作成して実行方法をオーバーライドすることです。2つ目は、クラスを作成するときに実行可能なインターフェイスを実装することです。次に、これら2つの方法を詳細に説明します。
スレッドのサブクラスを作成します
スレッドサブクラスのインスタンスを作成し、実行方法をオーバーライドします。実行方法は、start()メソッドを呼び出すと実行されます。上記のスレッドサブクラスの例を作成して、次の方法で実行できます。
public class mythread extends thread {public void run(){system.out.println( "mythread running"); }} mythread mythread = new mythread(); mytread.start();スレッドが起動すると、開始方法はすぐに戻り、戻る前に実行方法が実行されるまで待機しません。実行方法が別のCPUで実行されるようなものです。実行方法が実行されると、文字列Mythreadの実行が印刷されます。
次のように、スレッドの匿名のサブクラスを作成することもできます。
スレッドスレッド= newスレッド(){public void run(){system.out.println( "スレッドランニング"); }}; thread.start();新しいスレッドの実行方法が実行されると、コンピューターは文字列「スレッド実行」を印刷します。
実行可能なインターフェイスの実装
スレッド実行コードを記述する2番目の方法は、java.lang.runnableインターフェイスを実装するクラスの新しいインスタンスを作成することです。インスタンスのメソッドをスレッドで呼び出すことができます。以下は例です。
public class myRunnableはrunnable {public void run(){system.out.println( "myrunnanable running"); }}スレッドがrun()メソッドを実行するには、myrunnableのインスタンスオブジェクトをスレッドクラスのコンストラクターに渡す必要があります。例は次のとおりです。
スレッドスレッド= newスレッド(new myRunnable());
thread.start();
スレッドが実行されると、実行可能なインターフェイスを実装する実行方法を呼び出します。 「MyRunnable Running」は、上記の例で印刷されます。
同様に、以下に示すように、実行可能なインターフェイスを実装する匿名クラスを作成できます。
runnable myrunnable = new runnable(){public void run(){system.out.println( "runnable running"); }} thread thread = newスレッド(myrunnable); swrep.start();サブクラスを作成するか、実行可能なインターフェイスを実装しますか?
これらの2つの方法のどれが優れているかについて明確な答えはありません。また、要件を満たすことができます。私の個人的な意見では、実行可能なインターフェイス方法を実装することを好みます。スレッドプールは実行可能なインターフェイスを実装するスレッドを効果的に管理できるため、スレッドプールがいっぱいの場合、新しいスレッドはスレッドプールがアイドル状態になるまで実行されます。スレッドがスレッドサブクラスを実装して実装されている場合、これはもう少し複雑になります。
実行可能なインターフェイスとスレッドサブクラスを同時に実装する2つの方法を統合する必要がある場合があります。たとえば、スレッドサブクラスを実装するインスタンスは、実行可能なインターフェイスを実装する複数のスレッドを実行できます。典型的なアプリケーションはスレッドプールです。
共通エラー:start()メソッドの代わりにrun()メソッドを呼び出す
以下に示すように、スレッドを作成して実行することで行われる一般的な間違いは、start()メソッドの代わりにスレッドのrun()メソッドを呼び出すことです。
スレッドnewThread = newスレッド(myRunnable());
newthread.run(); // start();
Run()メソッドは実際にあなたが望むように呼び出されるため、最初は何も悪いことを感じません。ただし、実際には、RUN()メソッドは、作成されたばかりの新しいスレッドによって実行されるのではなく、新しいスレッドを作成した現在のスレッドによって実行されます。つまり、上記の2行のコードを実行するスレッドによって実行されます。作成された新しいスレッドを実行するには、run()メソッドを実行するには、新しいスレッドの開始メソッドを呼び出す必要があります。
スレッド名
スレッドを作成するとき、スレッドに名前を付けることができます。さまざまなスレッドを区別するのに役立ちます。たとえば、複数のスレッドがSystem.outに書き込まれている場合、スレッド名を介してどのスレッドが出力されているかを簡単に確認できます。例は次のとおりです。
myrunnable runnable = new myRunnable(); thread thread = newスレッド(runnable、 "new shood"); thread.start(); system.out.println(thread.getName());
myrunnableはスレッドのサブクラスではないため、myrunnableクラスにはgetname()メソッドがないことに注意する必要があります。次の方法で現在のスレッドへの参照を取得できます。
thread.currentthread();
string threadname = thread.currentThread()。getName();
スレッドコードの例:
これが小さな例です。まず、main()メソッドのスレッド名を出力します。このスレッドはJVMによって割り当てられます。次に、10個のスレッドを開き、1〜10に名前を付けます。各スレッドは、独自の名前を出力した後に終了します。
public class threadexample {public static void main(string [] args){system.out.println(thread.currentthread()。getName()); for(int i = 0; i <10; i ++){new Thread( "" + i){public void run(){system.out.println( "thread:" + getName() + "running"); } }。始める(); }}}スレッドを起動する順序は順序付けられていますが、実行の順序は注文されていないことに注意してください。つまり、スレッド1は必ずしもその名前をコンソールに出力する最初のスレッドではありません。これは、スレッドが順次ではなく並行して実行されるためです。 JVMとオペレーティングシステムは、スレッドの実行順序を決定し、そのスタートアップ順序は必ずしもスレッドの順序と同じではありません。
上記は、Javaスレッドによって作成された情報の編集です。今後も関連情報を追加し続けます。このウェブサイトへのご支援ありがとうございます!