سؤال

وكنت أبحث في شفرة المصدر من java.uti.concurrent.locks.AbstractQueuedSynchronizer واكتساب الأسلوب () يبدو شيئا من هذا القبيل -

 public final void acquire(int arg) {
    if (!tryAcquire(arg) &&
        acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
        Thread.currentThread().interrupt();
}

وماذا كان يقطع ترابط استدعاء اكتساب ()؟ إذا كان هناك الاختيار في مكان ما في طريقة المواضيع تشغيل ()، ثم انه قد تمر بعد استدعاء اكتساب () الذي هو على الارجح غير مرغوب فيه وغفل من؟

ورعاية أي شخص لإلقاء الضوء على سبب قطعة أعلاه من التعليمات البرمجية يفعل هذا؟

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

المحلول

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

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