1. نقاط المعرفة المقاطعة
يعتمد الملخص التالي على JDK8
لن تشرح هذه المقالة المقاطعة بالكامل ، ولكنها ستسرد فقط بعض النقاط الأكثر أهمية. لفهم تام للخيط.
فيما يلي بعض المقالات الجديدة التي تساعد على فهم المراجع:
بعد استدعاء طريقة المقاطعة ، يتم تعيين علامة المقاطعة على صواب للخيوط في الحالة المحظورة. ما إذا كان الاستجابة للمقاطعات (على دراية بالتغييرات في هذا العلم) يعتمد على تصميم واجهة برمجة التطبيقات. لا تستجيب API من JDK من IO ، وكتلة المزامنة المتزامنة ، والعديد من الطرق في القفل (باستثناء LockInterrupructly) للمقاطعات. بطبيعة الحال ، يمكن لخيط الاتصال استخدام الحكم بت العلم لجعل واجهة برمجة التطبيقات المصممة بحد ذاتها تستجيب للمقاطعات.
بعد استدعاء طريقة المقاطعة ، سيتم إلقاء المقاطع ** على الخيط في حالة الانتظار/التوقيت/timed_waiting وسيتم تعيين بتات العلم الخاطئة **. على سبيل المثال ، بعد مؤشر ترابط Thread.sleep ، object.wait ().
إذا لم يبدأ الخيط (جديد) ، أو انتهى (إنهاء) ، فلن يكون للاتصال Interrupt () أي تأثير عليه ، ولن يتم تعيين علامة المقاطعة.
أفضل الممارسات: في بعض الأحيان ، لا يُسمح ببعض الطرق مقاطعها أو إلغاؤها في التصميم ، ولكن عندما ترسل مؤشرات الترابط الأخرى طلبات المقاطعة ، فإنها تحتاج أيضًا إلى الحفاظ على علامات لتسهيل المتصلين الآخرين "لفهم الموقف".
المهمة العامة getNextTask (plockingqueue <quipe> قائمة انتظار) {Boolean interrupt = false ؛ حاول {بينما (صحيح) {try {return queue.take () ؛ } catch (interruptedException e) {// علامة حالة التبعية في مقطع خطي ؛ ] }}يمكن تنفيذ بعض عمليات الإلغاء باستخدام المقاطعات. على سبيل المثال:
حزمة متزامنة ؛ استيراد java.util.concurrent.blockingqueue ؛ استيراد java.util.concurrent.callable ؛ استيراد java.util.concurrent.executorservice ؛ استيراد java.util.concurrent.executors ؛ رميات الفراغ الثابتة العامة (سلسلة [] args) interruptedException {interrupttask interrupttask = new interruptsask () ؛ ExecutorService ExecutorService = Executors.NewSingLethReadExecutor () ؛ ExecutorService.Submit (InterruptTask) ؛ thread.sleep (100) ؛ interrupttask.cancel () ؛ ExecutorService.shutdown () ؛ }}/*** المهمة التي تستجيب لـ Interrupt*/class interruptsask تنفذ قابلة للاتصال <integer> {private blockingqueue <sught> Queue ؛ // احفظ مؤشر الترابط المراد مقاطعة الخيط t ؛ Override Public Integer Call () يلقي InterruptedException {system.out.println ("ابدأ مهمة محظورة") ؛ حاول {t = thread.currentThRead () ؛ thread.currentThread (). النوم (50000) ؛ } catch (interruptedException e) {system.out.println ("be interrupt") ؛ E.PrintStackTrace () ؛ } العودة 0 ؛ } public void cancel () {system.out.println ("cacel a task ....") ؛ // calling thread.currentThRead () سوف تحصل هنا على مؤشر الترابط الرئيسي ، بدلاً من مؤشر الترابط في تجمع مؤشر الترابط إذا (! t.isinterrupt ()) {t.interrupt () ؛ }}}لخص
ما سبق هو التحديث في Java استنادًا إلى ملخص JDK8 الذي قدمه المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!