라이프 사이클 자바 02-- 스레드와 일반적인 방법을 멀티 스레딩, 당신은 그것을 사네

마지막 장에서는 스레드의 몇 가지 기본적인 지식, 스레드 생성과 종료를 소개합니다. 이 문제는 스레드와 일반적인 방법 당신의 라이프 사이클을 가져올 것이다. 나는 더 자바 관련 지식을 배울 수있는 공개 "사이드 자바 코드"의 수에 대해 우려하고있다.

수명주기 스레드

스레드는 즉시 만들어 수행하기 시작 않으며 상태에서 실행되어왔다되는 것은 아니다. 스레드의 수명주기가 경험하게 될 것 전반에 걸쳐 새로운 (새),
준비 (Runnable를) 실행 (실행)을 차단 (차단) 및 파괴 (종료) 5 개 상태.

스레드 라이프 사이클 .PNG

새로운

이 스레드가 새로운 상태에 후 새로운 키워드를 사용하여 새 스레드 객체를 생성하는 의미합니다. 이 시점에서 그 만 JVM에서 메모리를 할당하고, 그것의 멤버 변수의 값을 초기화한다.

준비된

스레드 객체가 start () 메서드를 호출 할 때, 스레드가 준비 상태에있다. JVM을 호출 스택 및 프로그램 카운터가 실행되도록 예약 대기, 방법을 만들 수 있습니다.

달리기

스레드가 CPU 클럭의 준비 상태에있는 경우 실행의 스레드 시작 run () 메소드 스레드가 실행 중입니다.

나막신

어떤 이유로 스레드가 일시적으로 정지 실행에 CPU를 사용할 수있는 권리를 포기하는 것으로 상태 수단을 차단. 세 가지 범주의 폐쇄 케이스 :

  1. 대기 블록 (o.wait-> 대기 열) : 실행 RUN (실행) () 메소드 o.wait 스레드는 JVM이 대기 큐 (큐를 기다리는 것 같은데)로 스레드 리니
  2. 동기 블로킹 (자물쇠 -> 로크 풀) : 동기 로크 대상을 획득 할 때, 동기 로크가 다른 스레드에 의해 점유되는 경우, 스레드 실행 (실행)이 JVM은의 스레드 풀 (로크 풀)에 고정된다.
  3. 기타 차단 (SLEEP / 조인) : I / O 요청을 (실행) 스레드 실행에 Thread.sleep (긴 MS) 또는 t.join () 메소드를 실행 중이거나 실행은 JVM 스레드가 차단 설정합니다. 수면 () 제한 시간은 스레드에 대한 가입 () 대기는 종료 또는 시간 초과, 또는 I / O 처리가 완료되면, 스레드 (Runnable를) 상태로 다시 실행 할 수 있습니다.

파괴

스레드가 완료 또는 정상 스레드가 필수 조기 종료 또는 비정상적인 리드 종료 후, 스레드는 자원의 석방을 파괴됩니다.

일반적인 방법 스레드

수명주기의 스레드에서, 우리는 일반적으로 사용되는 방법 스레드를 배웠다. 일반적인 방법 스레드 대기가가의 notifyAll, 수면, 가입, 수율 등의 통지가 있습니다.

기다림

  • 역할 : 스레드 기다릴 것을 강요는, 스레드는 다른 스레드만을 기다려야 또는 인터럽트 통지를 반환한다 상태를 기다림 들어간다
  • 참고 : 대기 () 메서드를 호출하면, 객체는 잠금을 해제합니다. 따라서, 일반적으로 동기 부호 동기화 방법 또는 블록들에서 사용되는 방법을 기다린다.

자다

  • 역할 : N 밀리 수면에 스레드를 강제로는, 스레드는 다른 스레드 만 또는 인터럽트 통지를 반환한다 기다릴 TIMED_WATING 상태가된다;
  • 참고 : 대기 및 수면의 다른 방법은 현재 잠금 해제를 차지하지 않습니다.

수율

  • 역할 : 현재 스레드 또 다른 쓰레드 CPU 시간 경쟁 조각은 CPU 실행 시간 슬라이스를 수득;
  • : 정상적인 상황에서, 우선 순위가 높은 스레드가 성공적으로 경쟁 CPU의 타임 슬라이스를 얻을 수있는 더 큰의 가능성을 가지고 있지만,이 절대 아니며, 일부는 운영 체제 스레드 우선 순위를 구분하지 않습니다.

일시 정지

  • 역할 : 스레드 인터럽트, 그 의도는이 스레드에게 통지 신호를 제공하는 것입니다, 그것은 플래그 인터럽트 내부 스레드에 영향을 미칠 것이다;
  • 참고 :
  1. 인터럽트 스레드가 차단, 종료 상태로 강제되지 않습니다, 스레드의 상태를 변경하지 않습니다;
  2. 스레드-TIMED 기다림 상태이면, 방법은 예외 : InterruptedException를 throw) (따라서 스레드 단부 일찍-TIMED 기다림 상태 인터럽트 호출;
  3. 예외가 발생되도록 (예 : Thread.sleep를 (긴 공장 방법)와 같은) 많은 선언 던져의 InterruptedException 방법, 예외를 throw하기 전에, 인터럽트 플래그는 클리어, isInterrupted () 메소드는 false를 돌려줍니다 전화;
  4. 당신은 thread.interrupt () 메소드를 호출 할 수 있습니다, 내부 스레드 실행 방법은 값에 따라 스레드를 종료 우아한 될 수있다 ()의 thread.isInterrupted.

붙다

  • 역할 : 다른 스레드가 끝날 때까지 차단 된 상태로 현재 스레드는 현재 스레드는 그 준비 상태로 상태에 의해 차단된다;
  • 사용 시나리오 : 메인 스레드 프로모터 스레드, 자식 스레드의 반환 상태를 메인 스레드 기다립니다.
System.out.println(Thread.currentThread().getName() + "线程运行开始!");
Thread6 thread1 = new Thread6();
thread1.setName("线程 B");
thread1.join();
System.out.println("这时 thread1 执行完毕之后才能执行主线程");

통지

  • 액션 : 통지 Object 클래스 () 메소드,이 객체에서 대기 단일 스레드 웨이크 모니터;

    모든 스레드가이 개체에서 대기하는 하나 개의 스레드 일어나을 선택됩니다 경우, 선택은 임의이며, 스레드 전에 일어나, 스레드 호출 대기 () 메소드는, 현재까지, 객체의 모니터에 대기중인 깨어 스레드를 계속하기 위해,이 주제에 포기 스레드 잠금, 스레드는 다른 모든 활성 스레드 개체에 대해 동기화에 경쟁과 종래의 방식으로 일어났다됩니다. 비슷한 방법도의 notifyAll ()이 모니터에 대기 중의 모든 thread를 재개합니다.

다른 스레드 방법

  • 으로 isAlive ()는 : 여부 스레드 생존을 결정;
  • 경우 activeCount () : 활성 프로그램 스레드의 수;
  • 열거 () : 스레드 열거 프로그램;
  • currentThread는 () : 현재의 thread를 얻으십시오;
  • isDaemon는 () : 스레드가 데몬 스레드인지를 결정한다;
  • setDaemon를 () : 세트 스레드가 데몬 스레드;
  • 에서는 setName은 () : 스레드의 이름을 설정;
  • getPriority는 () : 현재 스레드의 우선도를 취득;
  • setPriority를는 () : 현재 스레드의 우선 순위를 설정.
    注意:线程优先级高,被CPU调度的概率大,但不代表一定会运行,还有小概率运行优先级低的线程。

멀티 스레딩 및 동시성 시리즈 추천

자바 여러 가지 방법으로 당신 것, 01-- 스레드 생성과 종료를 멀티 스레드

추천

출처www.cnblogs.com/weechang/p/12507989.html