スレッドとプロセス、スレッドクラス、実行可能なインターフェイス

処理する:

メモリ内で実行されているアプリケーションを指し、各プロセスには独立したメモリスペースがあり、アプリケーションは複数の
プロセスを同時に実行できます。プロセスはプログラムの1回限りの実行プロセスでもあり、実行するシステムの基本単位です。プログラム;システムは1つを実行しますプログラムは、作成、
操作から終了までのプロセスです。 
糸:

スレッドはプロセス内の実行ユニットであり、現在のプロセスでのプログラムの実行を担当し、プロセス内に少なくとも1つのスレッドがあります。プロセスには
複数のスレッドが存在する可能性があり、このアプリケーションはマルチスレッドプログラムと呼ばれることもあります。
つまり、プログラムの実行後に少なくとも1つのプロセスがあり、プロセスに複数のスレッドを含めることができます

スレッドのスケジューリング
タイムシェアリングのスケジューリング
すべてのスレッドが順番にCPUを使用する権利を使用し、各スレッドがCPUを占有する時間を均等に割り当てます。
プリエンプティブスケジューリング
CPUを使用するために、優先度の高いスレッドに優先順位を付けます。スレッドの優先度が同じ場合、ランダムに選択されます(スレッドのランダム性)。Javaはプリエンプティブスケジューリングを使用します。
 

メインスレッド:メインメソッドを実行するスレッド

シングルスレッドプログラム:Javaプログラムにはスレッドが1つだけあります。
実行はmainメソッドから始まり、上から下に実行されます
。JVMはmainメソッドを実行し、mainメソッドはスタックメモリに入ります
。JVMはCPU実行パスにメインメソッドを開くためのオペレーティングシステム
cpuは、このパスを介してメインメソッドを実行できます
このパスには、メイン(メイン)スレッドと呼ばれる名前が付いています。

スレッドクラスを作成する

マルチスレッドプログラムを作成する最初の方法:Threadクラス
java。lang。Threadクラスのサブクラスを作成します。スレッドクラス:はスレッドを記述するクラスです。マルチスレッドプログラムを実装する必要があり
ます。Threadクラスの実装手順を継承する必要があります。 :
1。クラスのThreadサブクラスを作成します
2. ThreadクラスのサブクラスのThreadクラスのrunメソッドをオーバーライドし、スレッドタスクを設定します(Mはスレッドを開くために何をしますか?)
3。サブクラスオブジェクトを作成しますThreadクラス
の4.Threooクラスの呼び出しメソッドstartメソッド
は、新しいスレッドを開始し、runメソッドvoid start()を実行してスレッドの実行を開始します。Java仮想マシンは、スレッドのrunメソッドを呼び出します。
その結果、現在のスレッド(メインスレッド)と別のスレッド(作成された新しいスレッドがそのrunメソッドを実行する)の2つのスレッドが同時に実行されます。
スレッドを複数回開始することは違法です。特にスレッドの実行が終了した場合、再起動することはできません。
Javoプログラムはプリエンプティブスケジューリングに属しており、そのスレッドの優先度が高く、そのスレッドが最初に実行されます。同じ優先度で、1つがランダムに選択されて実行されます。

マルチスレッドプログラムのメモリ図

スレッドクラス

スレッドの名前を取得し
ます
。1。ThreadクラスのメソッドgetName()String getNome()を使用して、スレッドの名前返します。
2.現在実行中のスレッドを最初に取得できます。スレッドでメソッドgetName()を使用して、スレッドの名前を取得します。
静的スレッドcurrent Thread()は、現在実行中のスレッドオブジェクトへの参照を返します。

スレッド名の設定(理解)
1。ThreodクラスのメソッドsetName(name)
void setName(String name)を使用して、スレッド名を変更し、パラメーター名と同じにします。
2.作成-パラメーターを使用した構築メソッド。パラメーターはスレッドの名前を渡します。親クラスのパラメーター構築メソッドを呼び出し、スレッド名を親クラスに渡し、親クラス(Thread)が子スレッドにname
Thread(String name)新しいThreadオブジェクトを割り当てます。


スレッドを一時停止します

public static void sleep(long millis):現在実行中のスレッドを指定されたミリ秒数の間一時停止します(実行を一時的に停止します)。 
ミリ秒数が経過した後も、スレッドは
public static void main(String [] args){ // Analog stopwatch for(inti = 1; i <= 60; i ++){ System .out .println(i); / / Use Threadクラスのsleepメソッドは、プログラムを1秒間スリープしますtry { Thread.sleep(millis:1000); } catch(InterruptedException e){ e。printStackTrace(); } }










 

マルチスレッドプログラムを作成する2番目の方法

スレッドを作成する別の方法は、Runableインターフェースを実装するクラスを宣言することです。次に、このクラスはrunメソッドを実装します。次に、このクラスのインスタンスを割り当て、スレッドの作成時にパラメーターとして渡して開始できます。
マルチスレッドプログラムを作成する2番目の方法:Runnableinterfacejava。langを実装します
Runnable
     Runnableインターフェースは、スレッドを介してインスタンスを実行することを目的としたクラスによって実装される必要があります。クラスは、runと呼ばれるパラメータのないメソッドを定義する必要があります。      java。lang。Thread
クラスのコンストラクター
Thread(Runnable target)は、新しいThreadオブジェクトを割り当てます。
     Thread(Runnable target、String name)は、新しいThreadオブジェクトを割り当てます。
実装手順:      1。Runnableインターフェイスの実装クラスを
     作成し
ます2.実装クラスでRunnableインターフェイスのrunメソッドをオーバーライドし、スレッドタスクを設定します3.Runnableインターフェイスの
     実装クラスオブジェクトを
     作成します4.Threadクラスオブジェクトを作成します、構築メソッドでRunnableインターフェイスの実装クラスオブジェクトを渡します。5。Threadクラス
     のstartメソッドを呼び出して、新しいスレッドを開始し、runメソッドを実行します。


 

Runnableインターフェースを実装してマルチスレッドプログラムを作成する利点:
1。単一継承の制限を回避します。
クラスは1つのクラスのみを継承でき(人は1つの親しか持つことができません)、Threadクラスを継承するクラスは継承できません。他のクラスを継承し
ます。Runnableインターフェイスを実装します。他のクラスを継承して他のインターフェイスを実装することもできます
。2。プログラムのスケーラビリティを強化し、プログラムのカップリングを減らします(デカップリング)
Runnableインターフェイスを実装し、スレッドタスクを設定して開始します。新しいスレッド分離(デカップリング)
実装クラスでは、runメソッドが書き直されます:スレッドタスクの設定、
Threadクラスオブジェクトの作成、およびstartメソッドの呼び出しに使用されます:新しいスレッドの開始に使用されます
 

スレッド作成を実現するための匿名の内部クラスメソッド


匿名:名前なし
内部クラス:他のクラスで記述されたクラス
匿名内部クラス関数:コードを単純化します
。親クラスからサブクラスを継承し、親クラスのメソッドを書き直し、サブクラスオブジェクトを一緒に作成します-
実装する実装クラスを完成させますクラスインターフェイス、インターフェイスのメソッドを書き換え、実装クラスオブジェクトの合成を作成します-ステップ完了
匿名内部クラスの最終製品:サブクラス/実装クラスオブジェクト、このクラスには名前がありません
形式:
新しい
親クラス/インターフェイス() { インターフェイスで親クラス/メソッドを繰り返す};

おすすめ

転載: blog.csdn.net/weixin_51980491/article/details/112995370