Javaの基本的な知識と関連するインタビューの質問のライフサイクルのスレッド

ライフサイクルのスレッド:
(1)ライフサイクル:
。死の全体のプロセスの途中で、最終的に誕生の瞬間からものを
、物事の長いライフサイクルでは、経験は常に異なる状態(状態幼児/若者であります中年/高齢者のステータスの状態/状況...)。
スレッドはまた、ライフサイクルを持っていますが、また異なる状態、各状態間の遷移があります。

(2)APIの定義:
ここに画像を挿入説明
(3)グラフ表示。
ここに画像を挿入説明

1:新しい状態(新) この// ;.)startメソッドが呼び出される前にのみ、ヒープメモリ空間に割り当てられ、新しい状態の下で、スレッドは、彼らが起動しない、ただスレッドオブジェクトのみ.Threadトン=新しいスレッドが(そこにある、新しいスレッドオブジェクトを作成するために使用tは新しい状態でスレッドオブジェクトは、startメソッドが呼ばれる新しい状態に属している場合、新しい実行可能状態からこの時間は、そうでない場合は、エラーを一度だけ呼ばれるスレッドオブジェクトのメソッドを起動:.ないIllegalThreadStateExceptionを。
2:実行状態(Runnableを) これは、準備と実行している2つの状態に分割されます。レディ状態と実行状態を表しています。レディ状態:スレッドオブジェクトの通話開始方法の後に、JVMのスケジューラのための待機動作状態(このスレッドは、この時点で実行されていない):CPUが複数ある場合、オブジェクトは、JVMスレッドスケジューリングを得、それは複数のスレッドが同時に実行することを可能にします。
3:ブロッキング状態(遮断) スレッドは一時的に動作を停止し、何らかの理由でCPUを放棄実行すると、ブロックされた状態になります。このJVMでスレッドがレディ状態を再入力するまで、CPUのスレッドに割り当てされることはありません、状態を実行する機会を持っている。状態は唯一可能なブロッキング1)::スレッドが実行中であるとき、ゲンロックを取得しようとし、Bは、JVMのスレッドが現在のAスレッドに保存されます。この時点でいた最初の直接ではなく、状態をブロック2例動作状態に、準備状態に入ります。 。ブロックされた状態2)に、プール内のオブジェクトのスレッドをロック:スレッドが動作中である場合、IO要求は、ブロックされた状態に今回発行されます。
4.待機状態(待機) (待機状態が唯一の他のスレッドによって起こさすることができる):スレッドが実行中である場合、この場合に使用されるいかなる方法パラメータを待っていない待機()メソッドを呼び出して、JVMは、この時点で、現在のスレッド待機プールの目的があります。
5:タイミング待ち状態(タイムアウト待ち) プール2)で待機するスレッドが実行中であると呼ばれる待ち時間(長い時間)方法、今回JVM現在のスレッドにおける物体の存在:1)(スリープまたは待機メソッドは、パラメータを持つメソッドを使用して)現在の実行スレッドをスリープ(長時間)の方法。
6:最終状態(終了) )0.2正常終了runメソッドが終了(不法死亡):一般的に)スレッドの終了0.1という死の状態というの終了後(異常な例外が発生した、プログラムが中断された)(不慮の死を).-スレッド現在の回復:現在のスレッドのボイドの履歴書を()一時停止:終了時に、あなたがスレッドのクラスメソッドで廃止、それ以外の場合はエラー(ないIllegalThreadStateExceptionを)スタートを再起動することはできません(スレッドセーフな問題があるためので非推奨、):.ボイド()一時停止します空の停止をスレッド():現在のスレッドの終了

インタビューの質問:スレッドの状態は何ですか?転送状態がどのような方法に依存していますか?
すべてのステータスおよび動作ステータス(Runnableを)が転写される
新しい状態(新新)(通話開始方法の実行可能):1
2:実行可能(Runnableを)
①ない、この場合に使用されるパラメータ待ち方法は、(待機)待機状態に入る
②(スリープまたは待機メソッドパラメータでメソッドを使用して、待機状態タイマに
ブロッキング状態(遮断):3
4待ち状態(待機)(メソッドは、唯一の他のスレッドによって使用されるか、または通知することができますメソッドの実行可能な目覚めのnotifyAll)
5:タイマー待機状態(時限待機)(時間パラメータに所定時間)
6:終了状態(終了)

二つの睡眠のスレッド:
スレッドのスリープ:実行スレッドは待機状態に入るように、いくつかの時間のためのタイミングを一時停止します。
方法:静的な無効スリープ(長いミリ)
コール睡眠、指定された時間内に、スレッドが実行する機会を得ることはありません睡眠を現在のスレッドのCPUを放棄。
この状態のスレッドは、同期ロック/同期リスナーを解放しません。
この方法は、より多くのシミュレートネットワーク遅延に使用され、複数のスレッドが同時にリソースの同じ過ちより明白な効果にアクセスするようにすることを。
開発中で、この方法の使用を審議ます

III。共同スレッド(参加)
メソッドへの参加は、完全な実行に別のスレッドのスレッド待機後にスレッドを表します。参加メソッドが呼び出された後、スレッドオブジェクトがブロックされています。
これは、スレッドが現在のスレッドと電流が単一のスレッドに結合糸であることを、関節スレッドとも呼ばれます。

class join extends Thread{
    @Override
    public void run() {
        for(int i =0;i<50;i++){
            System.out.println("join"+i);
        }
    }
}
public class JoinDemo {
    public static void main(String[] args) throws InterruptedException {
        join join = new join();
        for(int i =0;i<50;i++){
            if(i==10){
                join.start();
            }
            if(i==20){
                join.join();
            }
            System.out.println("main"+i);
        }
    }
}

四つのバックグラウンドスレッド:
バックグラウンドで実行中のスレッドは、その目的はまたとして知られている他のスレッドにサービスを提供することです「スレッドの守護者。」JVMのガベージコレクションのスレッドは、一般的なバックグラウンドスレッドです。
特長:すべてのフォアグラウンドスレッドが死亡している場合は、自動バックグラウンドスレッドの死は、フォアグラウンドスレッドがバックグラウンドスレッドで終わりではない、まだ終わっていません。
使用thread.isDaemon():テスト・オブジェクトかどうかは、バックグラウンドスレッドのスレッドです。
フォアグラウンドスレッドのスレッドがデフォルトのフォアグラウンドスレッドで作成されると、それはsetDaenon(真)法によりバックグラウンドスレッドにしている場合に設定することができ、新しいスレッドがバックグラウンドスレッドが作成されている場合にのみ、新しいスレッドがバックグラウンドスレッドです。
セットバックグラウンドスレッド:thread.setDaemon(真)、プロセスは、それ以外の場合は異常が現れないIllegalThreadStateException、メソッドの呼び出しの前に開始する必要があります。

V.スレッドグループとタイマー
JDK java.utilのパッケージTimerクラスで提供さは、特定のタスクを実行するタイミングを合わせることができます。
ザ・TimerTaskをクラスはタイマーによって実行されるタスクを表します。
一般的な方法:
スケジュール(TimerTaskをタスク、長時間の遅延を、長い期間):スケジュールを繰り返し、固定遅延実行のために指定された遅延の後に開始されてから指定されたタスク。
スケジュール(TimerTaskをタスク、長い遅延) : スケジュール指定した時刻に指定されたタスク

public class TimerDemo {
    public static void main(String[] args) {
        System.out.println("begin....");
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(new Date().toLocaleString());
            }
        },3000,1000);
    }
}

出力:
ここに画像を挿入説明
ThreadGroupクラスのは、スレッドのセットの管理を集中化することができる、スレッドグループを表します。
ユーザースレッドオブジェクトを作成するとき、あなたはそれがコンストラクタによって属するスレッドグループを指定することができます。
(スレッドグループグループ、列名の)スレッド、
スレッドが作成した場合パケットが設定されていない場合はBスレッド、スレッドB、そしてBは、スレッドグループのスレッドスレッドに追加されます。
スレッドグループがスレッドに参加するならば、スレッドはスレッド死ぬまでスレッドグループに存在している、あなたはの途中でスレッドを変更できませんパケット。
Javaプログラムが実行されている場合、JVMはデフォルトでは、すべてのスレッドが、スレッドグループの下に変更され、メインスレッドと呼ばれるグループを作成します。

公開された99元の記事 ウォンの賞賛2 ビュー2614

おすすめ

転載: blog.csdn.net/weixin_41588751/article/details/105229730