マルチスレッドの一般的な方法
1.スレッド名を取得して設定します
- Threadクラスでは、getName()メソッドを使用してスレッドの名前を取得し、setName()メソッドを使用してスレッドの名前を設定できます。
- スレッドの名前は通常、スレッドが開始される前に設定されますが、すでに実行されているスレッドの名前を設定することもできます。2つのThreadオブジェクトの実行は同じ名前ですが、わかりやすくするために、これは可能な限り回避する必要があります。
- さらに、プログラムがスレッドの名前を指定しない場合、システムは自動的にスレッドに名前を割り当てます。
T t1=new T();
t1.setName("线程A");
スレッドを取得する:
Thread.currentThread().getName()
Thread.currenThread()メソッドがあります。このメソッドは、この
キーワードの関数と同等の現在のスレッドを取得するためのものです。
ここで、スレッドの名前を設定すると、スレッドは設定した名前になりますが、名前を設定しないと、スレッドは自動的にスレッド名を作成し、Thread-0で始まります。
- メインスレッド
class R implements Runnable{
public void run() {
for(int i=0;i<3;i++) {
System.out.println(Thread.currentThread().getName()+i);}}}
public class Demo02 {
public static void main(String[] args) {
R r=new R();
new Thread(r,"thread-A").start();
r.run();}}
演算結果:
ここでは、スレッドオブジェクトを介してrun()メソッドを直接呼び出すため、出力結果には、r.run()によって実行されるメインスレッドが含まれます。このステートメントの呼び出しはmainメソッドによって完了するため、つまり、実際には、mainメソッド自体もスレッド(メインスレッド)です。
質問:mainメソッドはスレッドの形式で表示されるため、Javaランタイム中にいくつのスレッドが開始されますか?
少なくとも2つ開始します。1つはメインスレッドで、もう1つはGCスレッドです。
- スレッドが開始されているかどうかを確認します
thread.isAlive()
- スレッドの強制実行
オペレーティングシステムでは、join()メソッドを使用して、スレッドを強制的に実行できます。スレッドの強制実行中は、他のスレッドを実行できず、続行する前に2番目のスレッドの完了を待機する必要があります。
join()メソッド
- スレッドスリープ
スレッドスリープはスレッドの実行を一時停止させる可能性があります
プログラム内でスレッドを一時的にスリープさせるには、Thread.sleep()メソッドを直接使用します。
- スレッドの中断
スレッドが実行されているとき、別のスレッドは、interrupt()メソッドを介してその実行状態を直接中断できます。
- スレッドの優先度
Javaのスレッド操作では、すべてのスレッドが実行前に準備完了状態のままになります。このとき、そのスレッドの優先度が高いと、そのスレッドが最初に実行される可能性があります。
メソッドスレッド名を設定します。setPrionity(優先度)