مقدمة: ما هي قائمة المهام في Java ولماذا نحتاجها
في البرمجة، غالبًا ما تنشأ الحاجة لمعالجة البيانات بترتيب وصولها. تخيل طابورًا أمام صندوق المحاسبة في السوبر ماركت: أول شخص يصل يُخدم أولاً. في Java، يتم تنفيذ هذا المنطق من خلال واجهة Queue وتطبيقاتها. قائمة المهام (Task Queue) هي بنية بيانات تعمل وفق مبدأ FIFO (First In, First Out - "أول من يدخل، أول من يخرج").
لماذا نحتاج هذا؟ قوائم المهام لا غنى عنها في:
- معالجة الطلبات على الخادم (خادم الويب، API)
- تخزين البيانات مؤقتًا قبل الكتابة في قاعدة البيانات
- تنفيذ تجمع الخيوط (Thread Pool)
- تنظيم المهام غير المتزامنة
في هذه المقالة، سنشرح الواجهات والفئات الرئيسية للعمل مع قوائم المهام في Java، وسنكتب أمثلة بسيطة ونقدم نصائح عملية. المادة موجهة للمبتدئين، لذا سنبدأ من الأساسيات.
1. واجهة Queue وطرقها الأساسية
في Java، تحدد واجهة java.util.Queue العمليات الأساسية للعمل مع قائمة المهام. الطرق الرئيسية:
add(E e)— يضيف عنصرًا إلى نهاية القائمة. إذا كانت القائمة ممتلئة، فإنه يطرح استثناءً.offer(E e)— يضيف عنصرًا. على عكسadd()، فإنه يُرجعfalseفي حالة الفشل، وليس استثناءً.remove()— يزيل ويعيد العنصر الأول. إذا كانت القائمة فارغة، يطرح استثناءNoSuchElementException.poll()— يزيل ويعيد العنصر الأول، أوnullإذا كانت القائمة فارغة.element()— يعيد العنصر الأول دون إزالته. يطرح استثناءً إذا كانت القائمة فارغة.peek()— يعيد العنصر الأول دون إزالته، أوnull.
التطبيق الأكثر شيوعًا لـ Queue هو LinkedList. إنه بسيط ومناسب لمعظم المهام الأساسية.
import java.util.LinkedList;import java.util.Queue;
public class QueueExample { public static void main(String[] args) { // إنشاء قائمة مهام من السلاسل النصية Queue<String> taskQueue = new LinkedList<>();
// إضافة المهام (طريقة offer) taskQueue.offer("المهمة 1: معالجة الطلب"); taskQueue.offer("المهمة 2: إرسال البريد الإلكتروني"); taskQueue.offer("المهمة 3: إنشاء التقرير");
System.out.println("قائمة المهام: " + taskQueue);
// معالجة المهام بالتسلسل while (!taskQueue.isEmpty()) { String task = taskQueue.poll(); // أخذ المهمة الأولى System.out.println("جارٍ التنفيذ: " + task); // هنا يمكن كتابة منطق التنفيذ }
System.out.println("تم تنفيذ جميع المهام. القائمة فارغة: " + taskQueue.isEmpty()); }}مخرجات البرنامج:
قائمة المهام: [المهمة 1: معالجة الطلب, المهمة 2: إرسال البريد الإلكتروني, المهمة 3: إنشاء التقرير]جارٍ التنفيذ: المهمة 1: معالجة الطلبجارٍ التنفيذ: المهمة 2: إرسال البريد الإلكترونيجارٍ التنفيذ: المهمة 3: إنشاء التقريرتم تنفيذ جميع المهام. القائمة فارغة: true2. Deque — قائمة مهام ثنائية الاتجاه
واجهة Deque (Double Ended Queue) توسع Queue وتسمح بالعمل مع كلا طرفي القائمة. يمكنك إضافة وإزالة العناصر من البداية والنهاية. وهذا يوفر مرونة أكبر.
الطرق الإضافية الرئيسية:
addFirst() / offerFirst()— إضافة إلى البداية.addLast() / offerLast()— إضافة إلى النهاية (مشابه لـoffer()).removeFirst() / pollFirst()— إزالة من البداية.removeLast() / pollLast()— إزالة من النهاية.getFirst() / peekFirst()— عرض العنصر الأول.