توفر حزمة java.util.concurrent فئات حول العمليات متعددة الخيوط. تلك الشائعة الاستخدام هي executorservice وفئات التنفيذ الخاصة بها (مثل threadpoolexecutor ، وما إلى ذلك) ، المنفذ ، المنفذ ، المستقبل ، قابلة للاتصال ، إلخ.
1. واجهة ExecutorService (الموروثة من Executor): توفر بعض أساليب التشغيل غير المتزامنة متعددة الخيوط ، مثل Execute () ، إرسال () ، إيقاف التشغيل () ، إيقاف التشغيل () ، إلخ.
2. واجهة المنفذ: قم بتنفيذ المهمة المقدمة (مؤشر ترابط) ، مع تنفيذ طريقة واحدة فقط (Runnable A)
2. فئة المنفذين: يوفر بعض أساليب المصنع وبعض الأساليب العامة لتشغيل الفئات الفرعية المنفذة و threadfactory ، وما إلى ذلك ، مثل newxxx () ، xxxthreadfactory () ، إلخ.
3. واجهة Futrue: تمثل نتيجة تنفيذ مؤشر ترابط ، يوفر طرقًا للحصول على نتيجة تنفيذ مؤشرات الترابط وإلغاء مؤشرات الترابط ، مثل GET () ، cancle () ، إلخ.
4. واجهة قابلة للاتصال: يتم توفير مؤشر الترابط مع قيمة الإرجاع بواسطة JDK1.5 لتنفيذ واجهة جديدة
قم بعمل سجلات بسيطة لفهم خدمة Executorsors و Future
شفرة:
الطبقة العامة الرئيسية {private static int count = 0 ؛ public static void main (string [] args) {list <Tepative> resultlist = new LinkedList <> () ؛ /*** Executors.NewCachedThreadPool () قم بإنشاء تجمع ذاكرة التخزين المؤقت للمعلومات. إذا لم يتم استخدام مؤشر الترابط في الستينيات من القرن الماضي ، فسيتم إيقاف مؤشر الترابط وإزالته من تجمع ذاكرة التخزين المؤقت* منفذين. Thread*/ ExecutorService ExecutorService = Executors.NewCacheDthReadPool () ؛ لـ (int i = 0 ؛ i <10 ؛ i ++) {future future = executorService.submit (new callable <string> () {Override public string call () {try {system.out.println (thread.currentthread (). getName () ؛ Main.Count ؛ resultlist.add (المستقبل) ؛ } ExecutorService.shutdown () ؛ لـ (المستقبل المستقبلي: قائمة النتائج) {try {system.out.println (future.get () + "..is over ...") ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ } catch (executionException e) {e.printStackTrace () ؛ }} system.out.println ("Endlo -thread end ...") ؛ }}الإخراج:
pool-1-thread-1pool-1-thread-2pool-1-thread-3pool-1-thread-4pool-1-thread-5pool-1-thread-6pool-1-thread-7pool-1-ther-8pool-1-1-thread-9pool-9pool-1-thread-10pool-1-thread-1..Start main: ... العدد الرئيسي: ... 1POOL-1-THEREAD-2..END COUNT الرئيسي: ... 1POOL-1-THEREAD-1..END العد الرئيسي: ... 1POOL-1-THEREAD-3..END COUNT MAIN: ... 1POOL-1-THEREAD-2..END MAIN COUNT: ... 1POOL-1-THREAD-1..END MAIN COUNT: ... 1POOL-1-THREAD-3..END MAIN COUNT: 2POOL-1-THER أكثر من ... pool-1-thread-4.. ابدأ العدد الرئيسي: ... 2POOL-1-THEREAD-3..IST أكثر العد: ... 4POOL-1-THEREAD-6..END COUNT الرئيسي: ... 4POOL-1-THEREAD-6..END العد الرئيسي: ... 4POOL-1-THERED-6..END COUNT MAIN: ... 4POOL-1-THERED-6..END MAIN COUNT: ... العد: ... 6POOL-1-THREAD-7..IST أكثر من ... pool-1-thread-8.. ابحث العدد الرئيسي: ... 6POOL-1-THREAD-8..END العد الرئيسي: ... 7POOL-1-THEREAD-8..IST أكثر من ... pool-1-thread-9..TRANT COUNT MAIN العد: ... 7POOL-1-THREAD-9..END العد الرئيسي: ... 8POOL-1-THEREAD-9..IST أكثر من ... POUN-1-THREAD-10.. ابRAND العد الرئيسي: ... 8POOL-1-THEREAD-9..IST أكثر من ... pool-1-thread-10..START extain exember exember exember exember exember.
تقوم وحدة التحكم بطباعة نتيجة الإخراج أعلاه بعد الانتظار لمدة 5 ثوان. والسبب هو أنه عندما تبدأ جميع المواضيع ، تكون عملية متزامنة وستنتظر لمدة 5 ثوان. بشكل عام ، يبدو أنه انتظر فقط لمدة 5 ثوان. هذه عملية متزامنة.
تلخيص:
1 .
أ. تقبل طريقة التنفيذ () فقط مثيلات نوع Runnable ، لذلك لا يمكن الحصول على قيمة الإرجاع ، ولا يمكنها الحصول على حالة تنفيذ مؤشر الترابط ديناميكيًا.
ب. تقبل طريقة إرسال () مثيلات قابلة للتشغيل وقابلة للاتصال وستعود المثيل المستقبلي. يمكن أن تحصل طريقة GET () على المثيل المستقبلي على قيمة إرجاع تنفيذ مؤشر الترابط ورمي استثناءات تنفيذ مؤشرات الترابط. لذا ، إذا كنت ترغب في إرجاع النتيجة عن طريق تنفيذ مؤشرات الترابط وتكون قادرًا على التعامل مع الاستثناءات المحتملة أثناء تنفيذ مؤشرات الترابط ، أو إذا كنت ترغب في إلغاء تنفيذ مؤشرات الترابط في الوسط ، يمكنك استخدام طريقة إرسال ()
2. من خلال الإخراج ، يمكنك أن ترى أن الطريقة الرئيسية (الخيط الرئيسي) تنتهي بعد تنفيذ جميع مؤشرات الترابط. السبب:
أ. احصل على المثيل المستقبلي من خلال طريقة إرسال () ، واحصل على نتيجة إرجاع مؤشر الترابط من خلال طريقة GET () للمثيل المستقبلي. ستنتظر طريقة GET () للمثيل المستقبلي تنفيذ مؤشر الترابط قبل العودة ، وبالتالي فإن الطريقة الرئيسية ستنتظر أن تنتهي جميع مؤشرات الترابط الطفل قبل الانتهاء
ب. إذا تمت إزالة الحلقة المخصصة للأحمر أعلاه ، فستنتهي الطريقة الرئيسية (الخيط الرئيسي) مبكرًا دون انتظار انتهاء جميع خيوط الأطفال
التجديد:
1. عندما يتم تنفيذ مؤشرات ترابط متعددة بشكل متزامن ، في حالة حدوث استثناء في أحد مؤشرات الترابط ولم تتم معالجته ، سيتوقف مؤشر الترابط تلقائيًا من التنفيذ ، ولكن سيظل مؤشرات الترابط الأخرى تنفذ بشكل طبيعي. هذا هو السبب في أن Tomcat يمكن أن يستمر في تقديم الخدمات عند حدوث استثناء في طلب Tomcat.
2. يوفر Tomcat حمام سباحة خيوط وحوض انتظار. سيقوم كل طلب بإعادة تشغيل مؤشر ترابط جديد لمعالجة الطلب. إذا تم استخدام المواضيع الموجودة في تجمع الخيوط ، فسيتم وضعها في تجمع الانتظار والانتظار. عند إصدار مؤشر ترابط مرة أخرى في تجمع الخيوط ، سيتم تعيين مؤشر ترابط لمعالجة الطلبات في تجمع الانتظار.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.