سؤال

لدي برنامج يعمل في بعض المواضيع.موضوع الرئيسي سهم كائن مع غيرها من المواضيع في الرئيسية لدي دعوة إلى:

synchronized(obj){
    do stuff
}

لدي شك في أن الموضوع الرئيسي هو جائع و ليس الحصول على الوصول إلى obj.كيف يمكنني رفع أولوية الخيط الرئيسي أو هو بالفعل أعلى من المواضيع الأخرى عن طريق الافتراضي ؟

هل كانت مفيدة؟

المحلول

لديك طريقة setPriority () في فئة الموضوع.

هذا جافادوك .

وإعداد موضوع الأولوية إلى الحد الأقصى:

public static void main(String args[]) {
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    // Your main code.
}

نصائح أخرى

وهذه السلسلة من المقالات هنا تشير بعض التعقيدات في إدارة الأولويات موضوع على منصات مختلفة.

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

يمكنك استخدام الأسلوب setPriority (). على سبيل المثال:

new MyThread("Foo").start(); 
Thread bar = new MyThread("Bar"); 
bar.setPriority( Thread.NORM_PRIORITY + 1 ); 
bar.start();

وهذا يعطي منع الأولوية الجديدة التي ينبغي أن تأخذ بسرعة أكثر فو

وتحرير:

للرد على التعليق، يمكنك تعيين priortiy ماكس باستخدام:

bar.setPriority( Thread.MAX_PRIORITY );

زيادة الترابط الرئيسي أولوية الطريق Macarse يقول سوف تعمل على الأرجح.ومع ذلك, كنت تعتمد على المنبر وقائية موضوع جدولة العمل بشكل صحيح.يجب عليك بدلا من ذلك الاتصال Thread.yield() أسلوب ثابت في المواضيع عامل عندما يتم القيام به مع أي أقسام هامة من التعليمات البرمجية يتم تشغيل.هذا هو عادة جيدة للوصول الى حتى عند استخدام مستويات مختلفة من الخيط الأولوية.

ووغيرها أجاب بالفعل، يمكنك تعيين الواقع الأولوية لموضوع كما يلي:

Thread.currentThread().setPriority(priority);

ولكن يرجى أن يكون على علم، في المثال الخاص بك، أن الأولوية موضوع له علاقة في الموضوع الذي أجل الحصول على الوصول إلى كائن متزامنة شيء. يستخدم جافا معايير أخرى لمنح حق الوصول. انظر على سبيل المثال هذا .

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