1 أسباب لإدخال تجمعات الخيوط
نظرًا لأن دورة حياة الخيط تشمل الخلق ، الجاهز ، الجري ، الحظر ، وتدمير المراحل ، عندما يكون عدد المهام التي نلاحقها صغيراً ، يمكننا إنشاء عدة خيوط أنفسنا للتعامل مع المهام المقابلة ، ولكن عندما يكون هناك عدد كبير من المهام ، يتطلب إنشاء وتدمير المواضيع الكثير من النفقات العامة ، وسيؤدي استخدام تجمعات الخيوط إلى تخفيف هذه المشكلات بشكل كبير.
2 استخدام تجمع الخيوط
نحتاج فقط إلى استخدام الطريقة الثابتة التي توفرها فئة المنفذين لإنشاء تجمع مؤشرات الترابط المقابل:
التنفيذ العام الثابت في NewsingleThreadExecutor () تنفيذي الثابت العام NewfixedThreadPool () static static executorsevice newcachedthre adpool ()
يقوم NewsingLethReadexecutor بإرجاع المنفذ الذي يحتوي على مؤشر ترابط واحد.
تقوم NewfixedThreadPool بإرجاع مجموعة مؤشرات الترابط التي تحتوي على عدد محدد من مؤشرات الترابط.
يقوم NewCachedThreadPool بإنشاء مؤشرات ترابط المقابلة بناءً على عدد المهام الخاصة بالمستخدم.
نحتاج فقط إلى وضع المهمة المراد تنفيذها في طريقة التشغيل ، وتسليم فئة التنفيذ للواجهة القابلة للتشغيل إلى طريقة تنفيذ تجمع مؤشرات الترابط كمعلمة ، كما هو موضح أدناه:
Executor Executor = Executors.NewSingLethReadExecutor () ؛ executor.execute (new RunNable () {public void run () {// eventive tasks}}إذا كنت بحاجة إلى تمرير المعلمات إلى المهمة ، فيمكنك القيام بذلك عن طريق إنشاء فئة تنفيذ لواجهة Runnable.
3. مثال
(1): newsinglethreadexecutor
mythread.java
PublicClassMyThread يمتد Thread {Override Publicvoid Run () {system.out.println (thread.currentTheread (). getName () + "التنفيذ ...") ؛ {// قم بإنشاء تجمع مؤشرات ترابط يمكنه إعادة استخدام عدد من المواضيع المتكافئة. ؛ pool.execu te (T2) ؛ نتيجة الإخراج
Pool-1-Thread-1 ينفذ. . . Pool-1-Thread-1 ينفذ. . . Pool-1-Thread-1 ينفذ. . . Pool-1-Thread-1 ينفذ. . . Pool-1-Thread-1 ينفذ. . .
(2): NewfixedThreadPool
TestFixedThreadPool.java
PublicClass TestFixedThreadPool {publicstaticvoid main (string [] args) {// إنشاء تجمع مؤشر ترابط يمكنه إعادة استخدام عدد ثابت من سلسلة المواضيع المتنافسة = Executors.NewFixedThreadpo OL (2) ؛ Thread thore there t1 = new mythread () ؛ تجمع البلياردو. }} نتيجة الإخراج
Pool-1-Thread-1 ينفذ. . . Pool-1-Thread-2 ينفذ. . . Pool-1-Thread-1 ينفذ. . . Pool-1-Thread-2 ينفذ. . . Pool-1-Thread-1 ينفذ. . .
(3): NewCachedThreadPool
TestCachedThreadPool.java
PublicClass TestCachedthReadPool {publicstaticvoid Main (string [] args) {// إنشاء تجمع مؤشر ترابط يمكنه إعادة استخدام عدد من مؤشرات الترابط التجمعية المحرك (Executors.NewCachedthread Pool () ؛ Thread Thread T1 = New MyTherive () ؛ تنفيذ بلياردو. } نتيجة الإخراج:
Pool-1-Thread-2 ينفذ. . . Pool-1-Thread-4 ينفذ. . . Pool-1-Thread-3 يتم تنفيذها. . . Pool-1-Thread-1 ينفذ. . . يتم تنفيذ pool-1-thread-5. . .
(4): NewsCheduledThreadPool
TestScheduledThreadPoolexecutor.java
PublicClass TestScheduledThreadPoolexecutor {publicstaticvoid Main (string [] args) {SecrettHreadPoolexecutor exec = new ScreduledThreadPoolexecut tor (1) ؛ رمي New RunTimeException () ؛ ================================================== ============ RUNNA BLE () {// اطبع وقت النظام كل مرة من حين لآخر ، مما يثبت أن الاثنين ليس لهما تأثير على بعضهما البعض publicvoid run () {system.out.println (System.Nanotime ()) ؛ نتيجة الإخراج
================================================== ================================================== ================================================== ================================================== ================================================== =====