허용되는 답변 은 스레드 ID 를 얻는 방법 에 대한 질문에 답변 하지만 "Thread X of Y"메시지를 표시 할 수는 없습니다. 스레드 ID는 스레드마다 고유하지만 반드시 0 또는 1에서 시작하지 않아도됩니다.
다음은 질문과 일치하는 예입니다.
import java.util.concurrent.*;
class ThreadIdTest {
public static void main(String[] args) {
final int numThreads = 5;
ExecutorService exec = Executors.newFixedThreadPool(numThreads);
for (int i=0; i<10; i++) {
exec.execute(new Runnable() {
public void run() {
long threadId = Thread.currentThread().getId();
System.out.println("I am thread " + threadId + " of " + numThreads);
}
});
}
exec.shutdown();
}
}
그리고 출력 :
burhan@orion:/dev/shm$ javac ThreadIdTest.java && java ThreadIdTest
I am thread 8 of 5
I am thread 9 of 5
I am thread 10 of 5
I am thread 8 of 5
I am thread 9 of 5
I am thread 11 of 5
I am thread 8 of 5
I am thread 9 of 5
I am thread 10 of 5
I am thread 12 of 5
모듈로 산술을 사용하여 약간 조정하면 "스레드 X의 Y"를 올바르게 수행 할 수 있습니다.
// modulo gives zero-based results hence the +1
long threadId = Thread.currentThread().getId()%numThreads +1;
새로운 결과 :
burhan@orion:/dev/shm$ javac ThreadIdTest.java && java ThreadIdTest
I am thread 2 of 5
I am thread 3 of 5
I am thread 3 of 5
I am thread 3 of 5
I am thread 5 of 5
I am thread 1 of 5
I am thread 4 of 5
I am thread 1 of 5
I am thread 2 of 5
I am thread 3 of 5
% numThreads
대신 사용해야 합니다