Javaマルチスレッド(Interview)

2642 ワード

1、Javaでプロセスとは何か、スレッドとは何か
  • プロセス:プロセスはプログラム実行の一例であり、プロセスはスレッドのコンテナである.プログラムは命令、データ、およびその組織形式の記述であり、プロセスはプログラムのエンティティである.
  • スレッド:軽量レベルプロセスと呼ばれる場合があります(Lightweight Process,LWP)は、プログラム実行フローの最小単位である.スレッドはプロセスの1つのエンティティであり、システムによって独立してスケジューリングされ、割り当てられた基本単位であり、スレッド自身はシステムリソースを持たず、実行中に不可欠なリソースを少ししか持っていないが、同じプロセスに属する他のスレッドとプロセスが所有するすべてのリソースを共有することができる.1つのスレッドは別のスレッドを作成および取り消すと、同じプロセス内の複数のスレッド間で同時に実行できます.

  • Javaでは、プロセスはほぼJVMに等しく、スレッドはJVMに属し、javaアプリケーションが実行中に動的に作成および停止することができます.
    2、Javaプログラムには少なくともいくつのスレッドがありますか?
    各javaプログラムはmainスレッド内で実行されるため、各javaプログラムには少なくとも1つのスレッドがあります.
    3、Javaスレッドごとにどのような属性があるか
  • スレッドの識別子id
  • スレッドの名前
  • スレッド優先度
  • スレッドの状態
  • スレッドが属するスレッド群
  • 4、スレッドの状態
  • NEW:初期状態でスレッドが構築されているがstartメソッド
  • はまだ呼び出されていない.
  • RUNNABLE:実行状態、Javaスレッドはオペレーティングシステムの準備と実行の2つの状態によって一般的に実行中
  • と呼ぶ.
  • BLOCKED:ブロック状態、スレッドがロック
  • にブロックされていることを示す.
  • WAITING:スレッドが待機状態に入ることを示す待機状態であり、現在のスレッドに入るには他のスレッドが特定の動作(通知または中断)を行うのを待つ必要があることを示す
  • .
  • TIME_WAITING:タイムアウト待ち状態WAITINGとは異なり、指定された時間内に自分で戻ることができる
  • .
  • TERMINTED:終了ステータス、現在のスレッドが実行済みであることを示す
  • JDKインストールディレクトリの下binディレクトリの下でコマンドjstackツールを実行すると、コード実行時のスレッド情報を表示できます.
    5、スレッドの作成方法
  • 1.Threadクラス継承スレッドクラス作成
  • 2.Runnableインタフェース
  • の実装
    一般的にRunnableインタフェースを実現する方法はもっと良くて、両者の対比について、ThreadとRunnableの区別
    6、スレッドはなぜStop方式で停止できないのか
    stopメソッドはあまりにも暴力的で、スレッドを直接終了し、このスレッドが持っているロックをすぐに解放します.これらのロックはオブジェクトの一貫性を維持するために使用されます.この場合、書き込みスレッドが書き込んだデータが半分に書き込まれ、強制的に終了すると、オブジェクトは書き損じられ、同時にロックが解放されたため、もう一つのロックを待つリードスレッドは、この不一致の問題を順調に章として読みました.---『Java高同時プログラミング』.へいれつプログラムきそ
    7、次のプログラムは何を出力しますか
    public class MultiThreading {    private static class MyThread extends Thread {        public MyThread(String name) {            super(name);
            }        @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }        public static void main(String[] args) {
                MyThread myThread = new MyThread("myThread");
                myThread.run();
                myThread.start();
            }
        }
    }
    runメソッドを呼び出すとmainスレッド内部で実行されます.
    main
    myThread

    8、Daemonスレッドとは
    デーモンスレッドは特殊なスレッドであり、バックグラウンドで黙々とシステム的なサービス、例えばゴミ回収を完了し、JITスレッドはデーモンスレッドと理解することができる.対応するのはユーザースレッドで、ユーザースレッドはシステムの作業スレッドと理解することができて、それはプログラムが完成すべき業務操作を完成することができて、もしユーザースレッドがすべて終わるならば、このプログラムは何もすることがないことを意味して、1つのJavaアプリケーション内で、スレッドを守るだけである時、Java仮想機は自然に退出します.
    デーモンスレッドは、スレッドstartの前に設定する必要があります.そうしないと、IllegalThreadStateExceptionが放出されます.
    9、Javaでは、それらの操作は原子的ですか?
  • の読み取りおよび書き込み操作変数は、longおよびdouble
  • を除くプライマリタイプである.
  • 読み書き変数volatile
  • を宣言