स्वीकृत उत्तर थ्रेड आईडी प्राप्त करने के बारे में प्रश्न का उत्तर देता है, लेकिन यह आपको "वाई का थ्रेड एक्स" संदेश नहीं देता है। थ्रेड आईडी धागे में अद्वितीय होते हैं लेकिन जरूरी नहीं कि एक उदाहरण सवाल मिलान किया जाता है से 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();
}
}
और आउटपुट:
[email protected]:/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 gives zero-based results hence the +1
long threadId = Thread.currentThread().getId()%numThreads +1;
नए परिणाम :
[email protected]:/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
स्रोत
2013-08-20 14:09:59
यह वास्तव में वांछित जवाब नहीं है, किसी को – petrbel
@petrbel के बजाय '% numThreads' का उपयोग करना चाहिए, वह पूरी तरह से प्रश्न शीर्षक का जवाब दे रहा है, और ओपी अनुरोध करता है कि ओपी "5 की थ्रेड # 3 की तरह कुछ" अनुरोध करता है। – CorayThan