البرمجة غير المتزامنة في Java: دليل شامل 2024

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

البرمجة غير المتزامنة في Java: من الأساسيات إلى التقنيات المتقدمة

يجب على التطبيقات الحديثة معالجة آلاف الطلبات، والعمل مع قواعد البيانات، وواجهات API الخارجية، ونظام الملفات، دون حظر سلسلة التنفيذ الرئيسية. تتيح البرمجة غير المتزامنة في Java حل هذه المشكلات بكفاءة، مما يوفر الموارد ويحسن استجابة النظام. في هذا الدليل، سنشرح المفاهيم الأساسية والأدوات وأفضل الممارسات للبرمجة غير المتزامنة في Java.



ما هي البرمجة غير المتزامنة ولماذا نحتاجها؟

في البرمجة المتزامنة، يتم تنفيذ كل عملية بشكل تسلسلي: ينتظر السطر التالي من الكود اكتمال السابق. إذا كانت العملية تستغرق وقتًا (مثل طلب شبكة أو قراءة ملف)، يتم حظر السلسلة. تسمح البرمجة غير المتزامنة ببدء عملية ومواصلة تنفيذ مهام أخرى دون انتظار اكتمالها. عند اكتمال العملية، يتلقى البرنامج إشعارًا ويعالج النتيجة.

المزايا الرئيسية للنهج غير المتزامن في Java:

  • زيادة الأداء — الاستخدام الفعال لأنوية المعالج
  • تحسين الاستجابة — لا تتجمد واجهة المستخدم أثناء العمليات الطويلة
  • توفير الموارد — سلاسل تنفيذ أقل، تبديل سياق أقل
  • قابلية التوسع — معالجة آلاف الطلبات المتزامنة


الأدوات الرئيسية للبرمجة غير المتزامنة في Java

تقدم Java عدة مستويات من التجريد للعمل مع عدم التزامن — من السلاسل منخفضة المستوى إلى واجهات API عالية المستوى.



1. CompletableFuture — المعيار الحديث

CompletableFuture (Java 8+) هي فئة قوية لتكوين العمليات غير المتزامنة. تسمح بدمج وتحويل وتركيب المهام غير المتزامنة بأسلوب البرمجة الوظيفية.

import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;

public class AsyncExample { public static void main(String[] args) throws ExecutionException, InterruptedException { // مهمة غير متزامنة تعيد نتيجة CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(1000); // محاكاة عملية طويلة } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return "Результат асинхронной операции"; });

// سلسلة تحويلات CompletableFuture<String> result = future .thenApply(String::toUpperCase) .thenApply(s -> "Обработанный: " + s);

// معالجة الأخطاء result.exceptionally(ex -> { System.err.println("Ошибка: " + ex.getMessage()); return "Значение по умолчанию"; });

// الحصول على النتيجة (يحظر السلسلة الحالية) System.out.println(result.get()); }}

الطرق الرئيسية لـ CompletableFuture:

  • supplyAsync() — يبدأ مهمة غير متزامنة تعيد نتيجة
  • thenApply() — يحول النتيجة
  • thenCompose() — يدمج مع CompletableFuture آخر
  • allOf() — ينتظر اكتمال جميع المهام
  • anyOf() — ينتظر اكتمال أي من المهام


2. ForkJoinPool — تجمع سلاسل للحوسبة المتوازية

ForkJoinPool (Java 7+) يطبق خوارزمية "فرق تسد". يتم تقسيم المهمة الكبيرة إلى مهام فرعية يتم تنفيذها بالتوازي، ثم يتم دمجها. هذا هو الأساس لعمل التدفقات المتوازية و CompletableFuture بشكل افتراضي.

import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveTask;

public class ForkJoinExample extends RecursiveTask<

المدونات

توصيات الكتب