まず、スレッドとプロセス
スレッドは、プログラム実行の最小単位であり、それは動的です。
プロセスは、リソース割当システムの処理の最小単位であり、システムのスケジューリングは動的です。
マルチタスク--->高効率:スレッドとプロセスの
同時
時間にあなただけのプロセスまたはスレッドを実行することができ、同じ時点で
同じ時間に複数のプロセスまたはスレッドを実行することができます
データは、各プロセスは、独自の独立したメモリ空間を有して、マルチプロセスを共有していません。データマルチスレッド処理データが共有され、各スレッドは、独自の独立したスタック領域の面積を有しています。お互いに影響を与えていないスレッドとスレッド間の独立しています。
プログラムは、複数のプロセスを開始することができ
、複数のスレッドを開始することができますプロセス
のプロセスを開始する必要がありますスレッドは、独立して存在することはできませんが。
.classファイルは、JVM上で動作する、の.classつのスレッドです。JVMプロセスです。
三つの要素スレッド:二つ
CPU:
スレッドを実行すると、すべてのスレッドがCPUを共有しています。唯一のスレッドのCPUが正常に実行されますつかみます。
コード:
コードは、実行中のスレッドがブロック中に実行します。スレッドの後に実行されるメソッドは、公共のボイドの実行を開始する()です。
データ:
1)ローカル変数は、マルチスレッドで共有されていない
2)、静的変数が共有され、インスタンス変数を共有していないマルチスレッド方法スレッド延び
Runnableをマルチスレッドの方法を実装する)3、静的変数は、インスタンス変数を共有し、共有されています
3:使用のスレッド
最初の方法:
class MyThread extends Thread{
public void run(){
}
}
建线程:Thread t1=new MyThread();
//不要t1.run()来企图启动线程,那是单纯的调用该方法,并没有启动一个线程
启动线程: t1.start();
第二の方法:
class MyThread implements Runnable{
public void run(){
}
}
创建线程:MyThread m=new MyThread();
Thread t1 = new Thread(m);
启动线程: t1.start();
Threadクラスのメソッド:
getName():現在のスレッドの名前を取得
静的スリープ(ロング):スリープ状態に強制現在実行中のスレッド(一時停止)を、単にCPUをさせますが、ロックを解除しません。
静的currentThread():現在実行中のスレッドを取得します。
Threadクラスのメソッド:
のgetName():現在のスレッドの名前を取得
「のスレッドを遅らせる。」し、(一時停止)をスリープ状態に強制現在実行中のスレッド:静的な睡眠(長期)
静的currentThread():現在実行中のスレッドを取得します。
注意:
プリエンプティブ実行中のスレッド、結果は予測できませんので、スレッド。
4:なぜ、二つの方法があります
Javaの単一継承
class Test extends Student implements Runnable{
}
5:スレッドの状態
A)新しい状態(新):スレッドオブジェクトが作成された、その上に()メソッドを起動する一切の呼び出しはありません。
b)は準備完了状態(Runnableを):スレッドは、スレッドが行を修飾するCPUスケジューリング、を待って、準備ができていますが、スケジューラは、スレッドがスレッド実行状態のときに、それを選択していません。start()メソッドが呼び出されると、スレッドは、最初の準備完了状態になります。ブロックまたは実行中のスレッドから後、またはスリープ状態に戻って待機し、また、準備完了状態に戻ります。準備完了状態は、スレッドプールを維持します。すべてのスレッドは、スレッドプールに準備完了状態になります。
c)の動作状態(実行中):スレッドスケジューラは、実行中のスレッドプールの現在の状態としての時間でスレッドを選択します。これはまた、実行中の状態にスレッドするための唯一の方法です。スレッドを実行するCPU。
d)に待機している/ブロック/スリープ:これは、スレッドが実行する資格があるとき、それはでた状態です。実際には、共通分母である3状態、などこの組み合わせ:スレッドがまだ生きているが、現在の条件を実行していません。言い換えれば、それが実行されますが、何かが作品を発生した場合、彼は準備完了状態に戻してもよいです。
e)の死の状態:スレッドのrun()メソッドが完了し、それが死んでいることを意味します。スレッドオブジェクトは生きているかもしれないが、それは単一の実行スレッドを持っていません。スレッドの死後、それが最終的なもの。あなたが死んスレッドでスタートを呼び出すと()メソッドは、例外をスローしjava.lang.IllegalThreadStateException。
6:割り込みスレッド:死の状態に正常終了のスレッド
1)フラグ変数割り込みスレッドを使用して。ただ、車を運転してのような。
2)それが実行中のスレッドを停止しなかったが)(ストップを使用して、時代遅れであるが、しかし、この方法は危険であると提唱しました。
Threadクラスのメソッド:
参加する():スレッドの終了を待っているの実行。誰がどのスレッドで待機して呼び出します。誰が待って誰にメソッドを呼び出します。
割り込みは():スレッドをブロック割り込みます。実行中のスレッドを中断することはできません。
isInterruptedを():中断されたかどうかを判断する
空き割り込み情報を:静的)は(中断
7:同時アクセスのスレッド:複数のスレッドが同時に同じオブジェクトを操作します。
同期(共有領域)} {臨界領域
株:同時マルチスレッド動作同じオブジェクト
クリティカルエリア:マルチスレッド・コード領域は、領域が動作共有
すべての方法に影響を与えるが、スレッドセーフなセキュリティスレッドであると定義されてなりますクラス。途中で同期させることができ、それは同期方法です。
ゲンロックは、ここではそれが何をsynchronizedキーワードの簡単な説明があり、かつ特定の使用についての詳細は、フォローアップは、当該特別の記事を起動します、多くのがあります。
:私のコミュニティテンセントクラウド+へようこそポータル