独身者-12.ねじ山


独身者-12.ねじ山
マルチスレッド
オペレーティングシステムは、実行中のアプリケーションをプロセスと呼びます.
ねじ山
スレッドは、実行するタスクの順序で実行されるコードが線のように接続されているため、名前です.
マルチプロセスでは、各プロセスは互いに独立しています.
プライマリスレッド
Javaのすべてのアプリケーションは、メインスレッドでmain()を実行する方法で開始されます.
プライマリ・スレッドは、必要に応じて作業スレッドを作成し、コードを並列に実行できます.
ワークスレッドの作成と実行
JAvaのすべてのアプリケーションにプライマリ・スレッドが存在する必要があるため、プライマリ・タスクに加えて、追加のパラレル・タスク数のスレッドも生成されます.
Javaでは、タスクスレッドもオブジェクトとして作成されるため、クラスが必要です.
方法はjavaです.lang.Threadクラスを直接オブジェクト化して作成することもできますが、Threadクラスを継承してサブクラスを作成することもできます.
Threadクラスから直接作成
java.lnag.Threadクラスから作業スレッドオブジェクトを直接作成するには、次のようにRunnalbeをパラメータとするジェネレータを呼び出す必要があります.
Thread thread = new Thread(Runnable target);
Runnalbeはオブジェクトという名前のオブジェクトで、作業スレッドで実行可能なコードを持つインタフェースタイプなので、実装オブジェクトを作成して置き換える必要があります.
class Task implements Runnalbe{ //Runnalbe interface의 구현 클래스 Task 생성
	public void run(){
    	스레드가 실행할 코드;
    }
}
Runnableは実際のスレッドではなく作業内容を持つオブジェクトであるため、Runnabelインプリメンテーションオブジェクトを作成した後、Threadジェネレータをメディア値として呼び出して作業スレッドを生成する必要があります.
Runnable task = new Task(); //구현 객체 생성
Thread thread = new Thread(task); //구현 객체를 매개값으로 하는 Thread 생성자 호출
  • コード簡潔(匿名オブジェクトとして実行可能)
  • Thread thread = new Thread(new Runnalbe(){
    	public void run(){
        	스레드가 실행할 코드;
        }
    });
    作成時に直ちに実行するのではなくstrat()メソッドを呼び出してこそ、タスクスレッドを実行できます.
    thread.start();
    Threadサブクラスから作成
    タスクスレッドは、タスクスレッドが実行するタスクをRunnableにして含めることなく、Threadのサブクラスとして定義できます.
    public class WorkerThread extends Thread{
    	@Override
        public void run(){
        	스레드가 실행할 코드;
        }
    }
    Thread thread = new WorkerThread();
  • コード簡潔>匿名オブジェクト
  • の使用
    Thread thread = new Thread(){
    	public void run{
        	스레드가 실행할 코드;
        }
    };
    スレッド名
    thread.setName("스레드 이름"); //스레드 이름 변경
    thread.getName(); //스레드의 이름을 알고싶은 경우
    Thread thread = Thread.currentThread(); //스레드의 참조를 얻고싶은 경우
    同期メソッド(synchronized)
    臨界領域:マルチスレッドプログラムで1つのスレッドしか実行できないコード領域
    同期方法:Javaが指定した臨界領域に提供する方法
    public synchronized void method(){
    	임계 영역; //단 하나의 스레드만 실행
    }
    スレッド制御
    スレッドのステータス

  • ≪実行待ちステータス|Wait Run Status|oem_src≫:実行待ちステータス

  • 運転状態:運転待ちのスレッドでオペレーティングシステムがスレッドを選択し、CPUがrun()メソッドを実行する
    実行ステータスのスレッドは、すべてのrun()メソッドを実行する前に実行待ちステータスに戻ることができます.
    次に、実行待ちのスレッドがもう1つ選択され、実行中になります.

  • ≪終了ステータス|Exit Status|emdw≫:スレッドは、実行待機ステータスと実行ステータスの間で独自のrun()メソッドを繰り返し実行し、終了して停止します.
    一時停止状態はスレッドが実行できない状態であり、その状態から直ちに実行状態に戻ることはできず、一時停止状態から終了して待機運転状態に入る必要があります.
  • スレッドステータスの制御
    実行中のスレッドのステータスを変更することをスレッドステータス制御と呼びます.
    スレッド状態制御は、所与の時間内に一時停止するsleep()メソッドと、スレッドを安全に終了するstopフラグ、interrupt()メソッドを使用する.
  • interrup():中断状態のスレッドでInterruptedExceptionが発生し、異常処理コード(catch)から実行対象状態または終了状態に移行できます.
  • スリープ(long millis):スレッドを所定の時間にわたって一時停止状態にする.所定の時間が経過すると、自動的に待機状態に入ります.
  • stop():スレッドをすぐに終了します.不安定な終わりを招くので使わないほうがいいです.
  • 所定時間内に一時停止する
    実行中のスレッドを一時停止させるには、Threadクラスの静的メソッドsleep()を使用します.
    try{
    	Thread.sleep(1000);
    } catch(InterruptedException e){
    	//interrupt() 메소드가 호출되면 실행
    }
    スレッドの安全なクローズ
  • stopフラグを使用する方法
  • public class XXXThread extends Thread{ //thread를 상속한 클래스 생성
    	private boolean stop;
        
        public void run(){
        	while(!stop){ //stop이 true 가 되면 run()이 종료
            	스레드가 반복 실행하는 코드;
            }
            // 스레드가 사용한 자원 정리
        }
    }
  • 割り込み()メソッド
  • を使用
    interrupt()メソッドはスレッドが一時停止状態にある場合にInterruptExceptionを生成する役割を果たし,run()メソッドを正常に終了させることができる.