سؤال

السيناريو الخاص بي على النحو التالي:

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

من أجل تنفيذ الدلالات المذكورة أعلاه ، يولد كل طلب مؤشر ترابط (يسترجع فعليًا واحدًا متاحًا من تجمع مؤشرات الترابط) وينتظر استجابته عبر إخطار على كائن المزامنة. تقتصر فترة الانتظار مع مهلة param المرسلة إلى طريقة انتظار الكائن. يولد مؤشر الترابط الذي يولد الطلب إلى كائن يعرف في الواقع كيفية التعامل مع الطلب. API المكالمة لهذا الكائن معروف ، ولكن لا يوجد اتفاقية معروفة على مستوى الخدمة والتي من شأنها أن تحدد أن المكالمة لن تتدلى أبدًا إلى أجل غير مسمى. (على وجه التحديد في حالتي ، الخادم هو في الواقع عميل Corba - لكن هذه ليست النقطة.)

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

بالمناسبة ، أعلم أنه يمكنني الاحتفاظ بالإشارة إلى كائن مؤشر الترابط وبعد فترة زمنية محددة مسبقًا استدعاء طريقة المقاطعة (). هذا للأسف لا يضمن دلالات "المقاطعة" ...

Java Thread Emprerecation

شكرا لكم جميعا

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

المحلول

أعتقد أنه إذا لم تتمكن من الاعتماد على دلالات Interrupt () ، فقد تكون محظوظًا. لا توجد طريقة موثوقة أو آمنة لإنهاء موضوع بقوة. إنه أمر خطير في أي لغة.

آمل أن تحصل على Interrupt () ما تحتاجه حتى لو كان يمكن التحايل عليه. يجب أن تمر مكالمات Corba من خلال فئات الشبكة القياسية ، وبالتالي ينبغي أن تقاطع بشكل صحيح أي مكالمات حظر.

إنه أفضل ما يمكنك القيام به أقل من تفريخ عمليات الأطفال الكاملة.

نصائح أخرى

حاول استخدام ExecutorService وجعل المنطق التجاري الفعلي يتم تنفيذه في قابلة للاستدعاء. المستقبل الذي تم إرجاعه من قبل ExecutorService لديه احصل على() يتيح لك ذلك تحديد المدة التي ستنتظر فيها ...

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