من أجل تحسين استقرار أداء حجم التزامن الكبير في المشروع ، غالبًا ما تستخدم تجمعات الخيوط لأداء عمليات غير متزامنة متعددة الخيوط. هناك نوعان من الخيوط المتعددة. أحدهما هو تنفيذ واجهة Runnable ، التي لا تحتوي على قيمة إرجاع ، والآخر هو تنفيذ الواجهة القابلة للاتصال ، والتي لها قيمة إرجاع.
عندما يتم توقيت أحد المواضيع ، لا ينبغي أن يؤثر نظريًا على نتائج تنفيذ مؤشرات الترابط الأخرى ، ولكن المشكلات التي تنشأ في المشروع تشير إلى أنه تم حظر مؤشر ترابط واحد وأن واجهات الترابط الأخرى فارغة. في الواقع ، إنه سؤال بسيط للغاية ، لكن لأنني واجهته لأول مرة ، ما زلت أفكر في الأمر لفترة من الوقت. الأمر بسيط للغاية ، إنه بسبب خط الحجب
لم يتم إصدار العملية ، وبمجرد أن يكون مبلغ التزامن كبيرًا ، سيكون عدد برك مؤشرات الترابط ممتلئًا ، وبالتالي فإن المواضيع الأخرى في حالة انتظار.
المرفق هو رمز تصحيح الأخطاء كتبت بنفسي. عندما لا أستطيع التفكير في مشكلة ، قمت بمحاكاةها وربما ستظهر المشكلة.
استيراد java.util.concurrent.callable ؛ استيراد java.util.concurrent.executionException ؛ استيراد java.util.concurrent.executorservice ؛ استيراد java.util.concurrent.executors ؛ استيراد java.util.concurrent.future ؛ java.conit java.util.concurrent.timeoutexception ؛ فئة فوتوريست العامة {public static void main (string [] args) refruptedexception ، executionException ، timeOutException {Final ExecutorService exec = Executors.NewFixedThreadPool (1) ؛ callable <string> call = new callable <string> () {public string call () يلقي interruptedException {// ابدأ تنفيذ Thine Consing Operation Thread.Sleep (1000 * 2) ؛ إرجاع "1 تنفيذ مؤشر ترابط." ؛ }} ؛ callable <string> call2 = new callable <string> () {public string call () يلقي استثناء {// ابدأ في تنفيذ عملية الاستهلاك للوقت // thread.sleep (1000 * 5) ؛ إرجاع "2 تنفيذ مؤشر ترابط." ؛ }} ؛ callable <string> call3 = new callable <string> () {public string call () يلقي استثناء {// ابدأ في تنفيذ عملية الاستهلاك للوقت // thread.sleep (1000 * 5) ؛ إرجاع "3 تنفيذ مؤشر ترابط." ؛ }} ؛ المستقبل <string> future = exec.submit (call) ؛ المستقبل <string> future3 = exec.submit (call3) ؛ المستقبل <string> future2 = exec.submit (call2) ؛ سلسلة OBJ = "" ؛ سلسلة OBJ2 = "" ؛ سلسلة OBJ3 = "" ؛ حاول {obj = future.get (500 ، timeUnit.milliseconds) ؛ // قم بتعيين مهلة معالجة المهام إلى} // 1 second catch (استثناء e) {system.out.println ("مهلة المعالجة ....") ؛ E.PrintStackTrace () ؛ } جرب {obj3 = future3.get (3000 ، timeUnit.millisEconds) ؛ // قم بتعيين مهلة معالجة المهام إلى} // 1 second catch (استثناء e) {system.out.println ("مهلة المعالجة ......") ؛ E.PrintStackTrace () ؛ } try {obj2 = future2.get (3000 ، timeUnit.milliseconds) ؛} catch (استثناء e) {system.out.println ("Timeout timeout ....") ؛ E.PrintStackTrace () ؛ } system.out.println ("3 إرجاع المهمة بنجاح:" + obj3) ؛ system.out.println ("2 إرجاع المهمة بنجاح:" + obj2) ؛ system.out.println ("1 مهمة المهمة بنجاح:" + obj) ؛ exec.shutdown () ؛ }}ما ورد أعلاه هو مناقشة موجزة لاستثناءات الخدمة الناجمة عن مهلة غير متزامنة متعددة الخيوط في جافا. آمل أن يدعم الجميع wulin.com أكثر ~