Javaマルチスレッドの使用を簡単に紹介しました。私はすでにスレッドクラスと実行可能なクラスを導入しています。マルチスレッドをよりよく理解するために、この記事はスレッドの詳細な分析を実施します。
始める()
まず、APIでこの方法の導入を見てみましょう。
スレッドの実行を開始します。 Java仮想マシンは、スレッドの実行方法を呼び出します。
その結果、2つのスレッドが同時に実行されます。現在のスレッド(呼び出しからstartメソッドに返されます)と他のスレッド(実行方法を実行)。
スレッドを複数回起動することは違法です。特に、スレッドの実行が終了した場合、再起動することはできません。
STARTメソッドを使用して、マルチスレッドを真に実現するスレッドを起動します。現時点では、実行メソッドボディコードが実行を完了し、次のコードを直接実行し続けるのを待つ必要はありません。スレッドは、スレッドクラスのstart()メソッドを呼び出すことによって開始されます。この時点で、スレッドは準備が整った(実行可能な)状態で、実行されていません。 CPU時間スライスが取得されると、run()メソッドが実行され始めます。ここで、メソッドrun()はスレッドボディと呼ばれます。実行するスレッドのコンテンツが含まれています。実行方法は終了し、スレッドはすぐに終了します。
開始方法は、スレッドを開始する方法です。使用した後、Javaは実行中のメソッドを実行する新しいスレッドを作成します。これが小さなデモです:
for(int i = 0; i <3; i ++){thread t = new runnable(){@override public void run(){system.out.println(thread.currentthread()。 system.out.println(thread.currentthread()。getname()+"end")}}; t.start(); } system.out.println( "It Is over");実行結果:
それは終わりました
スレッド1スタート
スレッド-0スタート
スレッド2開始
スレッド0エンド
スレッド1エンド
スレッド2エンド
マルチスレッドはランダムであるため、結果は毎回異なる場合があります。これは、注意する必要があるものでもあります。スレッドの実行順序と通話順序は一貫していません。
走る()
実行方法は、スレッドごとに実行可能な実行可能な実行方法を呼び出し、上記のデモを変更することです。
for(int i = 0; i <3; i ++){thread t = new runnable(){@override public void run(){system.out.println(thread.currentthread()。 system.out.println(thread.currentthread()。getname()+"end")}}; t.run(); } system.out.println( "It Is over");実行結果:
メインスタート
メインエンド
メインスタート
メインエンド
メインスタート
メインエンド
それは終わりました
実行方法の直接的な結果は、開始とは大きく異なります。順番に実行され、新しいスレッドを開きません。
停止()
停止方法は、スレッドの実行を強制的に停止することです。安全ではないので、この方法を使用しないでください。停止が呼び出されると、ロックされたリソースがリリースされますが、このリリースは一貫性がなく、プログラムの問題を簡単に引き起こす可能性があります。スレッドの停止を制御する場合は、カスタム変数を使用して、underpurded()メソッドを判断またはis is intering()メソッドを使用できます。
class thread1はthread {@override public void run(){//スレッドボディが実行されているかどうかを判断します(!is interrupded()){//何か}}}}割り込み()
割り込みの機能は、中断されたスレッドに通知することですが、特定の割り込み実行にはスレッドのカスタム処理が必要であり、それを無視して実行を継続することもできます。特定の孤独は、参加、待機、および睡眠方法の実行をスレッド化するときに、中断のエクセプトを投げることです。
スレッドT1 = newスレッド(new runnable(){@Override public void run(){system.out.println(thread.currentthread()。getName()+"start"); try {for(int i = 0; i <100000; i ++){system.out.out.out.println(i+"; swree intreasured(1); sweed(1) System.out.println(「スレッドが中断されます」); t1.start(); thread.sleep(100); t1.interrupt();実行結果:
656666768スレッドはターゲットを挿入されています。lang.interrupdedexception:sleep interrurededthread-0 end at java.lang.thread.sleep(native method)at com.wk.aqi.act.test $ 1.run(test.java:23)at java.lang.thread.thread.run(swer
is unterrupted()
上記の割り込み方法を実行した後、スレッドが中断されているかどうかを判断するために、trueを返します。
setpriority(int newpriority)およびgetPriority()
スレッドの優先順位を設定し、スレッドの優先順位を取得します。 CPUによって割り当てられたリソースは、優先順位が高いスレッドに焦点を当てています。
スレッドT1 = newスレッド(new runnable(){@Override public void run(){long t = system.currenttimemillis(); system.out.println(thread.currentthread()。getName()+"start");自動生成ブロックe.printstacktrace()} system.out.println()スレッドT2 = newスレッド(new runnable(){@Override public void run(){long t = system.currenttimemillis(); system.out.println(shood.currentthread()。getName()+"start");自動生成ブロックe.printstacktrace(); out.println()。 t1.setpriority(10); t2.setpriority(1); t2.start(); t1.start();実行結果:
スレッド-0 startthread-1 startthread-0 t1 end 1357thread-1 t2 end 1371
優先度が同じ場合、T1とT2はほぼ同時に完了し、優先度が異なる場合は明らかな違いがあります。
getname()
それは比較的簡単です、スレッドの名前を取得します。
()と参加(長いミリ)
Jionメソッドの機能は、スレッドの実行が完了するのを待ち、結合(長いミリ)が最大待機時間を設定できることです。たとえば、メインスレッドは、子どものスレッドが完了して、実行を続ける前に子スレッドの結果を取得するのを待つ必要があります。この時点で、Join Methodを使用できます。
スレッドT1 = newスレッド(new runnable(){@Override public void run(){long t = system.currenttimemillis(); system.out.println(thread.currentthread()。 e.printstacktrace(); out.println()。 t1.start(); t1.join(); System.out.println( "実行する前にT1が実行されるのを待っています");実行結果:
スレッド-0 startthread-0 T1 End1001実行する前にT1が実行されるのを待つ
要約します
上記は、Javaマルチスレッドスレッドの実装方法コードのすべての詳細な説明です。誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。