マルチスレッドの詳細の問題
睡眠方法と待機方法の類似点と相違点?
類似点:
糸を凍った状態にしておきます。
違い:
睡眠は時間を指定する必要があります
待機は時間を指定するかどうかを指定できます
睡眠時間は長く、スレッドは一時的なブロッキング状態または実行状態にあります
待機に時間がない場合は、NotifyまたはNotifyAllを通じて目覚めなければなりません
同期で睡眠を定義する必要はありません
待機は同期で定義する必要があります
すべてが同期で定義されている場合
睡眠は、ロックではなく実行権を解放します
実行権を解放するのを待ちます、ロック
syschronized(obj){wait(); // 0 1 2 code ...} syschronized(obj){notifyall(); // 3 code ...}スレッドを停止する方法
停止方法
停止方法は時代遅れです。説明を読んだ後、他の解決策があることがわかりました。
スレッドエンド:スレッドタスクコードを実行し、実行方法を終了させます
実行方法を終了する方法は?
ループを定義することにより
注:スレッドがタスクで凍結状態にある場合、彼はまだマークを判断できますか?
いわゆる割り込み状態は、スレッドを停止することを意味するものではありません。
割り込み中割り込み状態の原因ターゲットスレッドが長時間待機する場合、割り込み方法を使用して、いわゆる割り込みがスレッドを停止しないことを待機させる必要があります。
割り込みの機能は、スレッドの凍結状態をクリアし、実行中の状態をスレッドに復元することです(スレッドをCPUの実行のために再資格にします)。
必須であるため、例外が中断されていることがあり、CATCHで例外をキャッチできます。
例外処理では、マークを変更してループを終了し、実行方法を終了させます。
デーモンスレッド
デーモンスレッド:バックグラウンドスレッドとして理解することもでき、前に作成された前景スレッドはすべてフォアグラウンドスレッドです。
スレッドがSetDaemon(True)を呼び出す限り;スレッドはデーモンスレッドとしてマークすることができます。
フロントエンドの背景スレッドは、実行するときに同じです。CPUの実行権を取得します。
それが終わるときのみが少し異なります。
フォアグラウンドスレッドは実行方法を介して終了する必要があり、スレッドは終了する必要があります。
バックグラウンドスレッドは、実行方法で終了することもあり、スレッドは終了します。別の状況があります。
プロセスのすべてのフォアグラウンドスレッドが終了すると、バックグラウンドスレッドがどのような状態にあるかに関係なく、それは終了し、プロセスは終了します。
プロセスは、前景のスレッドがすべて依存して終了します。
スレッドの優先順位
スレッドの優先順位:数字で識別、1-10
その中で、デフォルトの初期優先度は5であり、最も明白な3つの優先度レベルは1、5、および10です。
SetPriority(thread.max_priority);
スレッドグループ
スレッドグループ:スレッドグループ:新しいスレッドオブジェクトが属するスレッドグループは、スレッドコンストラクターを介して識別できます。
スレッドグループの利点は、同じグループの複数のスレッドで統一された操作を実行できることです。
デフォルトでは、それらはすべてメインスレッドグループに属します。
匿名の内部クラス
runnable rn = new runnable(){public void run(){}}; //上記のコードは、クラスのアノミムス実装に相当しますrunnable {public void run(){}} runnable rn = new Anomyous();読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!