高度なjava Threadを作成する方法


process

  • オペレーティングシステム上で現在実行中のプログラム
  • プロセスでは、複数のストリームが実行できます.
    これをThread(Thread)
  • と呼ぶ

    Multi Process

  • 複数のプロセスを実行する
  • Multi Tasking

  • トランザクションを処理する2つ以上のプロセスを実行する
  • Thread

  • プログラム実行フロー
  • プロセスで実行する詳細な作業ユニット
  • 1プロセス内に複数のThreadが存在してもよい
  • は軽量レベルフロー
  • とも呼ばれる.
  • 2 2個以上のThreadをマルチThreadと呼ぶ(
  • )

    Thread特性

  • プロセスと比較して、
  • のコンテキスト交換時間はより少ない
  • 同僚Threadとメモリを共有可能
  • Thread間の通信は、プロセス間の通信に比べて、より少ない時間(=より速い)を要する
  • 作成および終了時間は、
  • プロセスに比べて短い(=高速)
  • single Thread Program


    デフォルトでは、
  • はThreadを実行します.
  • main Thread
  • Multi Thread Program

  • デュアルスレッドプログラム
  • すべてのThreadが終了すると、プログラムは
  • を終了します.

    Threadの作成


    作成方法


    方法Thread Class継承

  • java.lang.Threadクラスを継承するクラスを作成します.
  • Threadをカバーするrun()メソッド
  • Threadを継承しているので、Threadです
    1.Threadクラスを継承するクラスインスタンスを作成します.
    2.このインスタンスを呼び出すstart()メソッド
  • // Thread클래스 상속받는 class MyThread1
    class MyThread1 extends Thread{
    	// run()메서드 오버라이딩
        @override
    	public void run(){
        ...
        }
    }
    
    // Thread 객체 생성 
    MyThread1 th = new MyThread1();
    th1.start();
  • MyThread 1はThreadを継承するため、Threadは
  • である.

    方法Runnable実装クラス

  • 実行可能インタフェース実装
  • Runnableインタフェースを有するrun()メソッドは
  • をカバーする.
  • javaの原則は単一継承であり、他のクラスを継承する場合
    Threadクラスは継承できません=>Runnableインタフェース実装
  • Threadが継承されておらず、start()メソッドをすぐに呼び出すことはできません.
    1.Runnableインタフェースを実装したクラスのインスタンスを作成します.
    2.この例を
    3.Threadオブジェクトのインスタンスを作成するときに作成者に渡すパラメータ
    4.Threadオブジェクトインスタンスを呼び出すstart()メソッド
  • class MyThread2 implements Runnable{
    	public void run() {
        ...
        }
    }
    
    MyThread2 run = new MyThread2();
    Thread th2 = new Thread(run);
    th2.start();

    方法匿名クラス

  • は、個別のクラスを作成するのではなく、
  • です.
  • 実行可能なインタフェースを実装する匿名クラス
  • Threadインスタンスの作成時にパラメータ
  • に渡す
    欠点は、毎回
  • を定義することですが、
  • 一度だけ書くとクラスを作成する必要がなくなります
  • Thread th3 = new Thread(new Runnable() {
    	@override
        public void run(){
        ...
        }
    });
    th3.start();

    Thread状態

  • NEW:スレッドが作成され、start()
  • が呼び出されていません.
  • RUNNABLE:運転または実行可能状態
  • BLOCKED:同期ブロックにより一時停止
    (ロック解除待ち)
  • WAITING:休止状態(UNNABLE)
    TIMED WAITING:一時停止時間が指定されている場合は
  • TERMINTED:スレッド終了ステータス
  • getState()スレッド戻りステータス
  • Thread.State state = targerThread.getState();
    // State : Thread클래스의 enum 상수 

    優先度

  • 優先処理
  • 優先度の設定(1-10):数値が大きいほど
  • 優先度が高くなります.
  • start()メソッドを呼び出す前に
  • を設定します.
  • Threadクラスの定数が使用可能
    Thread.MAX PRORITY:最大優先度=10
    Thread.MIN PRORITY:最低優先度=1
    Thread.NORM PRORITY:一般優先度=5
  • Thread th = new Thread();
    
    th.setPriority(10);
    th.start();
    
    Threae 클래스 상수 사용하는 경우 
    th.setPriority(Thread.MAX_PRIORITY);
    th.start();

    Daemon Thread

  • 日常スレッドタスクの実行を補助する
  • 日半にスレッドがすべて終了すると、デーモンスレッドは自動的に
  • を終了する.

    作成方法

  • start()メソッド呼び出し前設定
  • スレッドオブジェクト.setDaemon(true);
  • ex.3秒ごとに自動的に格納スレッド