|
| 1 | +# ThreadNamingExample |
| 2 | + |
| 3 | +```java |
| 4 | +public class ThreadNamingExample { |
| 5 | + public static void main(String[] args) throws InterruptedException { |
| 6 | + |
| 7 | + |
| 8 | + // 스레드 이름을 생성자에 전달하여 설정 |
| 9 | + Thread myThread = new Thread(() -> { |
| 10 | + System.out.println("현재 스레드 이름: " + Thread.currentThread().getName()); |
| 11 | + }, "myThread"); |
| 12 | + myThread.start(); |
| 13 | + |
| 14 | + // setName() 메서드를 사용하여 스레드 이름 설정 |
| 15 | + Thread yourThread = new Thread(() -> { |
| 16 | + System.out.println("현재 스레드 이름: " + Thread.currentThread().getName()); |
| 17 | + }); |
| 18 | + yourThread.setName("yourThread"); |
| 19 | + yourThread.start(); |
| 20 | + |
| 21 | + // 여러 개의 스레드를 생성하여 기본 스레드 이름을 출력 |
| 22 | + for (int i = 0; i < 5; i++) { |
| 23 | + Thread defaultThread = new Thread(() -> { |
| 24 | + System.out.println("현재 스레드 이름: " + Thread.currentThread().getName()); |
| 25 | + }); |
| 26 | + defaultThread.start(); |
| 27 | + } |
| 28 | + |
| 29 | + Thread.sleep(2000); |
| 30 | + } |
| 31 | +} |
| 32 | +``` |
| 33 | +- 스레드의 이름을 지정하지 않으면 Thread-0...Thread-n까지 이렇게 0부터 시작해서 이름을 부여하는데, |
| 34 | +- 위 경우 yourThread는 처음에 이름을 지정하지 않고 생성되었기 떄문에 Thread-0이라는 이름을 가지는데, setNamed()을 통해 이름을 수정함 |
| 35 | +- 따라서 이미 한번 nextThreadNum()이 호출되었기 때문에 threadSeqNumber가 1의 값을 갖고 있고, 이후 defaultThread는 Thread-1부터 시작해서 이름을 부여받게 됨 |
| 36 | +- 생성자에 이름을 같이 전달하면 nextThreadNum()이 호출되지 않고 바로 이름 부여됨 |
| 37 | + |
| 38 | +# CurrentThreadExample |
| 39 | +스레드의 이름을 가져오는 3가지 경우를 살펴본다 |
| 40 | + |
| 41 | +1. 현재 실행 중인 스레드 정보 가져오기 |
| 42 | +```java |
| 43 | +// 현재 실행 중인 스레드를 가져와 이름 출력 |
| 44 | +System.out.println("현재 스레드(main): " + Thread.currentThread()); |
| 45 | +System.out.println("현재 스레드 이름(main): " + Thread.currentThread().getName()); |
| 46 | +``` |
| 47 | +2. Thread 객체 내부에서 스레드 정보 가져오기 |
| 48 | +```java |
| 49 | + Thread thread1 = new Thread() { |
| 50 | + @Override |
| 51 | + public void run() { |
| 52 | + System.out.println("현재 스레드 (Thread 객체 사용): " + this); |
| 53 | + // 현재 스레드의 이름을 출력 |
| 54 | + System.out.println("현재 스레드 이름 (Thread 객체 사용): " + getName()); |
| 55 | + } |
| 56 | +}; |
| 57 | +``` |
| 58 | + - 위와 같은 경우는, 해당 스레드 내부에서 이름을 가져오는 것이기 때문에 바로 this 자체가 현재 스레드이다 |
| 59 | +3. Runnable 내부에서 스레드 정보 가져오기 |
| 60 | +```java |
| 61 | + Thread thread2 = new Thread(new ThreadName()); |
| 62 | + |
| 63 | + static class ThreadName implements Runnable { |
| 64 | + |
| 65 | + @Override |
| 66 | + public void run() { |
| 67 | + System.out.println("현재 스레드 (Runnable 사용): " + Thread.currentThread()); |
| 68 | + System.out.println("현재 스레드 이름 (Runnable 사용): " + Thread.currentThread().getName()); |
| 69 | + } |
| 70 | + } |
| 71 | +``` |
| 72 | + - Runnable은 여러 스레드 간 사용 가능하기 때문에 반드시 Thread.currentThread()를 지칭해서 현재 CPU를 할당받은 스레드 정보를 가져오도록 참조해야한다 |
0 commit comments