2017-02-28 1 views
3

에 의해 보였다 미국 주 우리는 약이 그림이 표시됩니다어떻게 이론적 스레드 상태에 맞게 우리는 '자바 스레드 상태'같은 구글 경우 jvisualvm

enter image description here

을하지만 우리는 jVisualVm을 열 경우 우리는 볼 것이다 다음

enter image description here

당신이이 그림을 meatch을 도와 드릴까요?

수면 상태는 단지 Thread.sleep()입니까? 달리기의 특별한 경우?

무엇 공원 상태? (내가 구글을 시도했지만 난 단지 첫째도 전에 알고 있기 때문에 나는 혼동)

답변

1

입니다. The Javadoc is quite helpful to get an understanding of the mapping you seek. 당신이 스레드 덤프를 얻고에서 상태를 비교한다면

"Finalizer" daemon prio=8 tid=0x022f4000 nid=0xd14 in Object.wait() [0x044cf000] 
    java.lang.Thread.State: WAITING (on object monitor) 

그래서 당신은 당신의 자신의 상태를 해독 할 수 있습니다 :

JVisualVM 상태는 쓰레드 덤프에 볼 것이다 여분의 상태 설명, 예를 나타냅니다 JVisualVM 및 스레드 덤프를 스레드 이름별로 비교합니다. 여기

이 매핑은 당신이 원하는됩니다 :

  • Running ->java.lang.Thread.State: RUNNABLE
  • Sleeping ->java.lang.Thread.State: TIMED_WAITING (sleeping)
  • Wait ->java.lang.Thread.State: WAITING TIMED_WAITING (on object monitor)
  • Park ->java.lang.Thread.State: WAITING TIMED_WAITING (parking)
  • Monitor ->java.lang.Thread.State: BLOCKED (on object monitor)

Park 상태는 WAITING 또는 TIMED_WAITING의 특수한 경우입니다. Wait과의 차이점은 객체 모니터에서 Wait이 발생한다는 것입니다 (즉, synchronized 블록 내의 Object.wait()). 반면에 Park은 모니터를 보유 할 필요없이 Unsafe.park을 통해 예약에서 스레드를 제거합니다 (즉, synchronized 블록이 필요 없음).

+0

나를 위해 아직도 불분명하다. 예를 들어 TIMED_WAITING 대 대기 TIMED_WAITING. 주차? – gstackoverflow

+0

내가 추가 한 JavaDoc 링크에서 확인할 수 있습니다. 'WAITING' - 대기중인 스레드의 스레드 상태. thread는, 다음의 메소드의 1 개를 호출하기 위해서 (때문에) 대기 상태가됩니다. 타임 아웃 없음의 Object.wait, 타임 아웃 없음의 Thread.join, LockSupport.park. 'TIMED_WAITING' - 지정된 대기 시간을 가진 대기 스레드의 스레드 상태. thread는 지정된 양의 대기 시간 (Thread.sleep, Object.wait with timeout), Thread.join (Timeout 포함), LockSupport.parkNanos, LockSupport를 사용하여 다음 메소드 중 하나를 호출하기 때문에 시간 초과 대기 상태에 있습니다.parkuchi – bashnesnos

+0

@gstackoverflow "Park"에 대한 설명도 추가했습니다. – bashnesnos

1

공원이 그림은 java.lang.Thread.State 열거를 나타냅니다

sun.misc.Unsafe.park() 
+0

응답을 연장 할 수 있습니까? 자바 의사는 명확하지 않다 – gstackoverflow