2011-09-02 6 views
6

스레드가 종료되고 새 스레드가 생성되면 스레드 번호 (ID)가 증가합니다. 자바 7은 단순히 숫자를 늘리는 것을 즐기는가 아니면 내가 잘못하고있는 것일까?Java 7 : 스레드 재사용? (연결 끊기 - 다시 연결)

Java 7을 사용하여 서비스 응용 프로그램을 작성합니다.이 응용 프로그램은 연결될 때 새 스레드를 생성 한 다음 연결 서비스를 제공합니다. 서비스가 닫기 메시지를 받으면 루프에서 빠져 나와 스레드의 코드 완성을 허용합니다. 따라서 스레드의 수명은 마치 인스턴스 객체와 마찬가지로 이해할 수 있으므로 종료되었습니다. Java 7은 Thread.stop() 또는 Thread.destroy() 또는 이와 같은 것을 사용하지 않습니다. (내가 생각하는 v5 이후가 아닙니다.)

"Open Connection", "Connection Close"및 "Message 보내기"버튼과 해당 println 문을 스레드에 표시하므로 어떤 일이 벌어지는 지 알 수 있습니다. 내가 인쇄하는 변수 중 하나는 Thread.currentThread()입니다. 첫 번째 연결을 열면 currentThread()는 Thread [Thread-0,5, main]입니다. 연결을 닫고 Thread [Thread-0,5, main]가 종료됨을 나타내는 루프에서 메시지를 가져옵니다.

이제 다시 정사각형으로 돌아갑니다. 맞습니까? 스레드가 없습니다.

다시 클릭하여 Thread [Thread-1,5, main]를 입력하십시오. 저거 봐? "Thread-0"대신 "Thread-1". 내가 할 때마다 번호는 1

에 의해 상승

해설 재 (너무 많은 문제가 아니라면 사이드 질문 무슨 말은 "주 5"입니다.?) : 스레드 정지 : Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.

답변

2

스레드 0,5,

0 주 : ID

5

메인 우선 :

스레드 ID가 long 이름이다; 300,000 년 후에 백만 개의 스레드를 생성하면 ID가 오버 플로우됩니다. 스레드가

종료하고 새로운 스레드가 생성 될 때 (ID)

3

참조하는 번호가 현재 실행중인 스레드 수를 의미하지는 않습니다 ... Thread- "n"은 스레드에 이름을 명시 적으로 제공하지 않을 때 사용되는 자동 생성 된 숫자입니다. 이름이없는 각각의 Thread 인스턴스에는 n이 1 씩 증가합니다.이 숫자는 스레드 인스턴스를 식별하는 데 사용됩니다.

그러나 스레드 풀을 사용하는 경우 실행하기 위해 제출 한 작업은 이전에 다른 작업에 사용 된 스레드에서 실행될 수 있습니다.

또한 자바 7에는 별다른 차이가 없습니다. Java 6의 동작은 똑같습니다 (이전 버전도 의심 스럽습니다).

+0

감사합니다. 그리고 헤이 - 기뻐하십시오!나는 이제 당신의 답변을 투표 할 수있는 충분한 점수를 얻었습니다. "5, main"이 무슨 뜻인지 아십니까? –

+0

나는 이것이 쓰레드 ID가 맥도날드에서 팔린 햄버거의 수와 같을 것이라 생각한다. BigInteger를 사용하기를 바랍니다. –

+0

"5, main"접미사는 스레드를 생성 (또는 유지 관리) 한 사람이 첨부해야한다고 생각합니다. –

0

스레드 번호를 증가시킨다.

예.

+0

설명해 주셔서 감사합니다. 질문을 쓸 때 실제로 그것에 대해 생각하지 않았다는 것을 알 수 있습니다. –