स्वीकार किए जाते हैं जवाब करने के बारे में सवाल का जवाब एक धागा आईडी, लेकिन यह तुम क्या नहीं करता संदेशों "वाई के थ्रेड एक्स"। थ्रेड आईडी थ्रेड में अद्वितीय हैं, लेकिन जरूरी नहीं कि यह 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
Modulo arithmetic का उपयोग करने वाला एक मामूली ट्विक आपको "Y का धागा X" सही ढंग से करने की अनुमति देगा:
// 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
इसके बजाय का उपयोग करना चाहिए