لماذا يقاطع AbstractQueuedSynchronizer على الحصول على القفل
-
03-07-2019 - |
سؤال
وكنت أبحث في شفرة المصدر من 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) هو نشر المقاطعة إلى موضوع الدعوة، والتي لولاها الحصول على ابتلاعها.
لا تنتمي إلى StackOverflow