1. المنفذون
يمكن اعتبار فئة المنفذين "فئة الأدوات". نقلا عن مقدمة في API JDK1.6:
المصنع والأساليب العملية للمنفذ ، ExecutorService ، ScripedExecutorService ، ThreadFactory ، والفئات القابلة للاتصال المحددة في هذه الحزمة. يدعم هذا الفصل الطرق المختلفة:
(1) قم بإنشاء وإرجاع طريقة تعيين خدمة ExecutorService مع سلاسل التكوين الشائعة الاستخدام.
(2) قم بإنشاء وإرجاع طريقة تعيين SchedeDexecutorService مع سلاسل التكوين شائعة الاستخدام.
(3) قم بإنشاء وإرجاع طريقة "ملفات التنفيذ" "المرفقة" ، والتي تعطل إعادة التكوين عن طريق جعل الأساليب الخاصة بالتنفيذ يمكن الوصول إليها.
(4) قم بإنشاء وإرجاع طريقة لـ ThreadFactory ، والتي يمكنها تعيين مؤشر الترابط الذي تم إنشاؤه حديثًا على حالة معروفة.
(5) إنشاء وإرجاع طريقة غير معلنة ، بحيث يمكن استخدامها في طرق التنفيذ التي تتطلب الاتصال.
من خلال هذه الفئة ، يمكنك الحصول على مثيلات متعددة من تجمعات الخيوط ، مثل استدعاء NewsingleTheReadExecutor () للحصول على خدمة تنفيذية واحدة ، والاتصال بـ NewFixedThreadPool () للحصول على خدمة تنفيذي من مجموعة مؤشرات ترابط ثابت ، وما إلى ذلك. أسهل شيء هو استخدامه لتنفيذ الكائنات القابلة للتشغيل ، أو يمكنك تنفيذ بعض الكائنات التي تنفذ <t>. لا توجد قيمة إرجاع باستخدام طريقة Start () للاشتراك. إذا كانت الطريقة التي يتم تنفيذها بواسطة مؤشر الترابط لها قيمة إرجاع ، فسيكون من الأفضل استخدام eventorservice. يمكنك اختيار إرسال () أو invokeall () أو Invokeany () وتحديد الطريقة المناسبة وفقًا للموقف المحدد.
بعض الطرق المنصوص عليها في هذا الفصل هي:
1.1 static static evecorervice newcachedthreadpool ()
قم بإنشاء تجمع مؤشرات ترابط ينشئ مؤشرات ترابط جديدة حسب الحاجة ، ولكنه سيعيد استخدامها عند توفر مؤشرات الترابط التي تم إنشاؤها مسبقًا. تعمل تجمعات الخيوط هذه عادةً على تحسين أداء البرنامج للبرامج التي تؤدي العديد من المهام غير المتزامنة على المدى القصير.
1.2 static static evecorervice newfixedthreadpool (int nthreads)
قم بإنشاء تجمع مؤشرات ترابط مع عدد ثابت من مؤشرات الترابط القابلة لإعادة الاستخدام لتشغيل هذه الخيوط في قائمة انتظار غير محدودة مشتركة.
1.3 Secorrosorservice Newsinglethreadexecutor ()
قم بإنشاء منفذي يستخدم مؤشر ترابط عامل واحد لتشغيل مؤشر الترابط في قائمة انتظار غير محدودة.
يمكن استخدام جميع الطرق الثلاثة مع مثيلات واجهة ThreadFactory. وإعادة مثيل واجهة ExecutorService.
2. واجهة الموضوع
إنشاء كائنات مؤشر ترابط جديدة حسب الحاجة. لم يعد استخدام مصانع مؤشرات الترابط يتطلب الكتابة اليدوية لمكالمات مؤشرات الترابط الجديدة ، والسماح للتطبيقات باستخدام فئات فرعية خاصة بموضوع ، وخصائص ، إلخ.
أبسط تطبيق لهذه الواجهة هو:
class simplethreadfactory تنفذ threadfactory {public thread newThread (runnable r) {return new thread (r) ؛ }} 3
توفر هذه الواجهة طريقة لإدارة الإنهاء.
4. إنشاء مؤشر ترابط تجمع مؤشرات ترابط قياسي
4.1 توفير مؤشر ترابط بسيط ينفذ الواجهة القابلة للتشغيل
mythread.java
حزمة com.zj.concurrency.executors ؛ الطبقة العامة myThread تنفذ Runnable {private int count = 1 ، number ؛ MyThread (int num) {number = num ؛ System.out.println ("Create thread-" + number) ؛ } public void run () {بينما (true) {system.out.println ("thread-" + number + "run" + count + "time (s)") ؛ if (++ count == 3) return ؛ }}} سيقوم هذا الموضوع بطباعة معلومات الإنشاء والتنفيذ المقابلة.
4.2 ابدأ الموضوع باستخدام CacheDthreadPool
CachedThreadPool.java
package com.zj.concurrency.executors ؛ import java.util.concurrent.executorservice ؛ import java.util.concurrent.executors ؛ الفئة العامة CacheDthReadPool {public static void main (string [] args) {executorService exec = evelopors.newcachedthreadpool () ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) exec.execute (new MyThread (i)) ؛ exec.shutdown () ؛ }} نتيجة:
إنشاء مؤشر ترابط-0Create Thread-1Create Thread-2Create Thread-3Thread-0 تشغيل 1 الوقت (S) Thread-0 Run 2 Time (s) Thread-1 Run 1 time (s) thread-1 run 2 time (s) thread-2 run 1 time (s) threet-regh-run 2 time (s) create-4thread-4 run 1 time-4 time-run 2 time-thin
4.3 ابدأ الموضوع باستخدام FlexThreadPool
FlexThreadPool.javapackage com.zj.concurrency.executors ؛ استيراد java.util.concurrent.executorservice ؛ استيراد java.util.concurrent.executors ؛ الفئة العامة الثابتة {public static void main (string [] args) {executorService exec = Executors.NewFixedThreadPool (2) ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) exec.execute (new MyThread (i)) ؛ exec.shutdown () ؛ }} نتيجة:
إنشاء مؤشر ترابط-0Create Thread-1Create Thread-2Create Thread-3Create Thread-4Thread-0 Run 1 Time (s) Thread-0 -0 Run 2 Thine (S) Thread-2 Run 1 Thine-2 Run 2 Time (S) Thine-3 Run 1 (S) Thine-Thine-Thine-3 Run 2 Time (S) Thine-4 Time-Time-Time-4 Time-4 Thin
4.4 ابدأ الموضوع باستخدام SingleThreadExecutor
SingleThreadexecutor.java
package com.zj.concurrency.executors ؛ import java.util.concurrent.executorservice ؛ import java.util.concurrent.executors ؛ الطبقة العامة SingleThreadExecutor {public static void main (string [] args) {executorService exec = evelysors.newsinglethreadexecutor () ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) exec.execute (new MyThread (i)) ؛ exec.shutdown () ؛ }} نتيجة:
إنشاء مؤشر ترابط-0create Thread-1Create Thread-2Create Thread-3Create Thread-4Thread-0 -0 تشغيل 1 (S) THERE-0 -0 RUN 2 THE THE THE THE THE THE THE THE THE
5. تعاون مع استخدام واجهة ThreadFactory
نحن نحاول إضافة إعدادات السمة الخفي والأولوية إلى الموضوع.
5.1 تعيين خصائص موضوع الخلفية
DaemonThreadFactory.java
package com.zj.concurrency.executors.factory ؛ import java.util.concurrent.threadfactory ؛ الفئة العامة DaemonThreadFactory تنفذ threadfactory {public thread newThread (runnable r) {thread t = new thread (r) ؛ T.SetDaemon (صواب) ؛ العودة ر ؛ }}
5.2 تعيين سمات الأولوية
maxprioritythreadfactory.java
package com.zj.concurrency.executors.factory ؛ import java.util.concurrent.threadfactory ؛ الطبقة العامة maxprioritythreadfactory تنفذ threadfactory {public thread newThread (runnable r) {thread t = new thread (r) ؛ T.SetPriority (thread.max_priority) ؛ العودة ر ؛ }} الحد الأدنى من الأولوية minprioritythreadfactory.java
package com.zj.concurrency.executors.factory ؛ import java.util.concurrent.threadfactory ؛ الطبقة العامة minprioritythreadfactory تنفذ threadfactory {public thread newThread (runnable r) {thread t = new thread (r) ؛ T.SetPriority (thread.min_priority) ؛ العودة ر ؛ }}
5.3 ابدأ مؤشر الترابط مع إعدادات السمة
execfromfactory.java
package com.zj.concurrency.executors ؛ import java.util.concurrent.executorservice ؛ import java.util.concurrent.executors ؛ import com.zj.concurrency.executors.factory.daemonthrodfactory ؛ import com.zj.concurrency.executors.factory.MinPriorityTherDfactory ؛ فئة عامة execfromfactory {public static void main (string [] args) يلقي الاستثناء {executorService defaultexec = eventors.newcachedthreadpool () ؛ ExecutorService daemonexec = Executors .NewCacheDthReadPool (New DaemonTreadFactory ()) ؛ ExecutorService maxPriorityExec = Executors .NewCachedThreadPool (maxpriorityThreadFactory ()) ؛ ExecutorService minpriorityexec = evecorors .NewCachedThreadPool (minpriorityThreadFactory ()) ؛ لـ (int i = 0 ؛ i <10 ؛ i ++) daemonexec.execute (myThread (i)) ؛ لـ (int i = 10 ؛ i <20 ؛ i ++) if (i == 10) maxpriorityexec.execute (myThread (i)) ؛ وإلا إذا (i == 11) minpriorityexec.execute (mythread (i)) ؛ else defaultexec.execute (mythread (i)) ؛ }} نتيجة:
إنشاء مؤشر ترابط-0Create Thread-1Create Thread-2Create Thread-3Thread-0 تشغيل 1 الوقت (S) Thread-0 -0 تشغيل 2 الوقت (S) Thread-1 Run 1 time (s) thread-1 Run 2 time (s) thread-2 run 1 time (s) thread-thind-run 2 regh-think (s) create-4thread-4 run 1 time-4 time-time (s) create thin Thread-6Create Thread-7Thread-7 قم بتشغيل 1 (S) THERE-7 Run 2 Time (s) إنشاء مؤشر ترابط-8thread-8 تشغيل 1 الوقت (S) Threet-8 Run 2 Time (s) إنشاء Thread-9Create Thread-10-Thread-10 Run 1 Time (s) Thine-10 Thread-10 Thine-10 Time (s) إنشاء سلسلة ترابط -11 -10. الوقت (s) thread-3 قم بتشغيل 1 الوقت (s) thread-3 قم بتشغيل 2 الوقت (s) إنشاء مؤشر ترابط -12 create thread -13create thread-14thread-12 Run 1 time (s) thread-12 run 2 time (s) thread-13 run 1 time (s) thread-19 run 2 time (s) create-15-15-15 reg (s) regl-rech 2 time (s) reate 1 -11 run 1 thine 1 thine-thine-thine-thine-thine-thine-thine-thine-thines-thines 1 thin الوقت (s) إنشاء مؤشر ترابط -17Create Thread-18Create Thread-19Thread-14 Run 1 Time (s) thread-14 Run 2 time (s) thread-17 Run 1 time (s) thread-17 Run 2 Time (s) thread-18 Run 1 time 1 (s) time-18 run 2 time (s) thine-11 run 1 time-thin