سؤال

لدي تجمع مؤشر ترابط ثابت أقوم بإرسال المهام إليه (يقتصر على 5 المواضيع).كيف يمكنني معرفة أي واحد من هؤلاء 5 المواضيع ينفذ مهمتي (شيء من هذا القبيل "موضوع # 3 من 5 تقوم بهذه المهمة")?

ExecutorService taskExecutor = Executors.newFixedThreadPool(5);

//in infinite loop:
taskExecutor.execute(new MyTask());
....

private class MyTask implements Runnable {
    public void run() {
        logger.debug("Thread # XXX is doing this task");//how to get thread id?
    }
}
هل كانت مفيدة؟

المحلول

باستخدام Thread.currentThread():

private class MyTask implements Runnable {
    public void run() {
        long threadId = Thread.currentThread().getId();
        logger.debug("Thread # " + threadId + " is doing this task");
    }
}

نصائح أخرى

الإجابة المقبولة تجيب على سؤال حول الحصول على معرف ، ولكن لا يسمح لك بالرسائل "موضوع X من y".معرفات الخيط هي فريدة من نوعها عبر الخيوط ولكن لا تبدأ بالضرورة من 0 أو 1.

هنا مثال مطابقة السؤال:

giveacodicetagpre.

والإخراج:

giveacodicetagpre.

قرص بسيط باستخدام حسابي modulo سيسمح لك بالقيام "موضوع X من Y" بشكل صحيح:

giveacodicetagpre.

نتائج جديدة:

giveacodicetagpre.

يمكنك استخدام thread.getCurrentThread.getid ()، ولكن لماذا تريد أن تفعل ذلك عند logrecord الكائنات التي يديرها المسجل لديها بالفعل معرف مؤشر الترابط.أعتقد أنك تفتقد تكوين في مكان ما الذي يقوم بتسجيل معرفات المؤلم لرسائل السجل الخاصة بك.

إذا كان صفك يرث من الموضوع, ، يمكنك استخدام الطرق getName و setName لتسمية كل موضوع.وإلا يمكنك فقط إضافة ملف name الحقل إلى MyTask, ، وتهيئته في المنشئ الخاص بك.

إذا كنت تستخدم تسجيل الدخول، فستكون أسماء الرسائل مفيدة. مصنع مؤشر الترابط يساعد في هذا:

giveacodicetagpre.

الإخراج:

giveacodicetagpre.

هناك طريقة الخيط الحالي الحصول على:

giveacodicetagpre.

بعد أن حصلت على كائن فئة الموضوع (T)، يمكنك الحصول على معلومات تحتاج باستخدام طرق فئة مؤشر الترابط.

gettting معرف الموضوع:

giveacodicetagpre.

اسم الموضوع Gettting:

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top