Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

Javaمثال حول Thread Pool في جافا

في المثال التالي قمنا بإنشاء كلاس إسمه MyRunnable يطبق الإنترفيس Runnable.
بعدها فعلنا Override للدالة run() حتى نجعل أي كائن من الكلاس MyRunnable يطبع إسمه و عدد المرات التي تنفيذه فيها كل ثانية.

ثم قمنا بإنشاء كلاس إسمه Main, و الذي قمنا فيه بإنشاء كائن نوعه ExecutorService إسمه executor يمثل خمس نسخ من الكلاس Thread.

بعدها قمنا بإنشاء حلقة for تعيد تنفيذ الأوامر التي بداخلها خمس مرات.
في كل مرة سيتم جعل الكائنات الخمسة الموجودة في الكائن executor تمثل خمسة كائنات من الكلاس MyRunnable, و سيتم تشغيلهم مباشرةً.

لاحظ أنه عند تشغيل البرنامج سيقوم بخلق خمس كائنات Thread و تشغيل كل واحد فيهم ثلاث مرات.


MyRunnable.java
public class MyRunnable implements Runnable {
 
    @Override
    public void run() {
 
        // هنا قمنا بإنشاء حلقة تعيد تنفيذ ما بداخلها ثلاث مرات
        for (int i=1; i<=3; i++)
        {
            // الحالي و عدد المرات التي تم تنفيذه فيها Thread هنا سيتم طباعة إسم كائن الـ
            System.out.println(Thread.currentThread().getName() +", counter = "+ i);
 
            // بعدها سيتم إيقافه مدة ثانية واحدة
            try {
                Thread.sleep(1000);
            }
            catch(Exception e) {
                System.out.println(e.getMessage());
            }
        }
 
    }
 
}

Main.java
public class Main {
 
    public static void main(String[] args) {
 
        // فقط executor يمكن الوصول إليهم من خلال الكائن Thread هنا قمنا بإنشاء 5 نسخ من الكلاس
        ExecutorService executor = Executors.newFixedThreadPool(5);
 
        // هنا قمنا بإنشاء حلقة تعيد تنفيذ ما بداخلها 5 مرات
        for (int i=1; i<=5; i++)
        {
            // و سيتم تشغيلهم MyRunnable كائنات من الكلاس executor هنا سيتم إعتبار الكائنات الخمسة الموجودة في الكائن
            executor.execute(new MyRunnable());
        }
 
        // executor في الأخير سيتم إيقاف تنفيذ أوامر الكائنات الخمسة الموجودة في الكائن
        executor.shutdown();
 
    }

}

عند تشغيل البرنامج, نلاحظ أنه يطبع خمس أسطر كل ثانية.

pool-1-thread-2, counter = 1
pool-1-thread-4, counter = 1
pool-1-thread-1, counter = 1
pool-1-thread-3, counter = 1
pool-1-thread-5, counter = 1
pool-1-thread-2, counter = 2
pool-1-thread-5, counter = 2
pool-1-thread-1, counter = 2
pool-1-thread-4, counter = 2
pool-1-thread-3, counter = 2
pool-1-thread-4, counter = 3
pool-1-thread-3, counter = 3
pool-1-thread-1, counter = 3
pool-1-thread-5, counter = 3
pool-1-thread-2, counter = 3