인프런 커뮤니티 질문&답변

Teirdarn Linkaden님의 프로필 이미지
Teirdarn Linkaden

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

name() / currentThread() / isAlive()

[공유] setName 시 threadName이 1부터 시작하는 이유

해결된 질문

작성

·

83

0

해당 강의 10분 경 나온 설명으로, setName 메소드 자체가 스레드 이름에 영향을 주나? 싶은 궁금증이 들어서 확인해 보았고, 저와 비슷한 궁금증을 가지신 분들이 계실 것 같아 공유드립니다.

 

setName은 Thread name 생성 로직에는 관여하지 않습니다. 다만, 해당 예제에서는 new Thread()로 이름 없는 스레드를 생성 후(이 때 Thread-0으로 생성), 해당 Thread를 setName을 통해 Thread name을 바꿔주고 있어서, setName을 사용하면 1부터 카운트되는 것 처럼 보였던 것입니다.

 

image.png

-> 새로 생성된 스레드의 이름은 Thread-0

image.png

-> Thread-0이 yourThread로 치환됨

 

yourThread를 생성하는 부분에서 Thread의 이름을 임의로 넣어주고, 아래에서 스레드를 생성하면 0번부터 생성됨을 확인할 수 있습니다.

 

image.png

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

해당 질문을 통해 스레드 이름 설정과 관련된 궁금증을 가지고 계신 것으로 보입니다. 자바에서 스레드 이름을 설정하는 것은 Thread 객체의 setName 메소드를 통해 이루어집니다. 기본적으로 new Thread()로 생성된 스레드는 “Thread-0”과 같은 이름을 갖게 되는데, 이는 JVM이 각 스레드에 순차적으로 부여하는 이름입니다. 따라서 첫 번째 직접 생성한 스레드가 “Thread-0”이 됩니다.

setName 메소드는 스레드에 이미 지정된 이름을 변경할 때 사용되며, 스레드 생성 시 이름을 지정하지 않으면 JVM이 자동으로 이름을 지정합니다. 이름을 수동으로 설정하고 싶은 경우, 스레드 생성 시 또는 생성 후 setName 메소드를 통해 할 수 있습니다. 이름 설정 로직에 직접 관여하지는 않지만, 사용자가 원하는 이름을 스레드에 할당할 수 있게 해주는 유용한 방법입니다.

공유해주신 이미지와 설명에 따르면, yourThread를 생성하고 이름을 설정한 이후에는, 이후 생성되는 스레드들은 순차적으로 “Thread-1”, “Thread-2” 등의 이름을 갖게 됩니다. 이는 setName 메소드가 스레드에 이름을 설정하는 방식과 JVM이 이름을 자동으로 할당하는 방식이 상호 보완적으로 작동하기 때문입니다.

공유해준 이미지들을 통해, 스레드 생성 및 이름 설정의 기본적인 이해를 돕는 좋은 예시를 제공하셨습니다. 각 스레드의 이름을 설정하고, 그 이름을 확인하며 멀티스레딩 프로그램을 더 효율적으로 관리할 수 있습니다.

이미지를 통해 제공된 정보 외에도, 실제 프로그래밍 과정에서는 고유한 스레드 이름을 지정함으로써 디버깅과 로깅을 용이하게 만들 수 있습니다. 스레드 이름을 명시적으로 관리하는 것은 멀티스레드 환경에서 프로그램의 가독성과 유지보수성을 향상시키는 좋은 방법입니다.

Teirdarn Linkaden님의 프로필 이미지
Teirdarn Linkaden

작성한 질문수

질문하기