مرحبا الزملاء!
تذكر المقالة ، التي نترجمها اليوم ، مرة أخرى أهمية الكتاب الذي لا يدوم طويلاً "
Java Concurrency في الممارسة " ، الذي ألفه براين جويتز.
تشير تواريخ التعليقات على هذه المقالة في الأصل إلى أن المؤلف لا يقوم بتحديثها وإعادة نشرها للمرة الأولى. لذلك ، سمحنا لأنفسنا أيضًا بتحديث الرابط الخاص بالكتاب المذكور في مقالة راؤول غابرييل أورم وماريو فوسكو وألان ماكروفت ، الذي نشرته مانينغ تحت عنوان Java 8 in Action. نحن نعد ترجمة لنسخة جديدة تسمى جافا الحديثة. ولكن الآن ، دعونا نتحدث عن الكلاسيكية. أنت مدعو القط.
سألني قارئ يحمل لقب Shobhit هذا السؤال في التعليقات على مقالة حول
12 كتاب Java المتقدمة للمبرمجين من المستوى المتوسط - الجزء 1 . السؤال جيد حقًا ، وأعتقد أن العديد من مبرمجي Java لديهم شكوك مماثلة عندما أوصى أحدهم في عصرنا بقراءة
Java Concurrency في الممارسة . عندما تم نشر هذا الكتاب لأول مرة ، في عام 2006 ، كان عالم جافا بأكمله لا يزال غير قادر على اكتشاف الابتكارات في مجال المنافسة في Java 1.5. أعتقد أن المحاولة الجدية الأولى كانت لتحسين دعم Java المدمج في تعدد مؤشرات الترابط والقدرة التنافسية. بعد ذلك ، لم يشك الكثير من المبرمجين في الأدوات الجديدة التي ظهرت في واجهة برمجة التطبيقات ، على سبيل المثال ، حول
CountDownLatch و
CyclicBarrier و
ConcurrentHashMap
والعديد من الآخرين. خدمهم الكتاب كمقدمة مصححة للعمل مع هذه الأدوات ، وأخبرهم كيفية استخدامها لكتابة تطبيقات Java عالية الأداء التنافسية.
هذه بالضبط هي الفكرة العامة لهذا الكتاب ، وفي هذا السياق ، سيصفها لك كثير من المطورين إذا سألت "كيف تحب" Java Concurrency in Practice ""؟ ومع ذلك ، أغتنم هذا الكتاب بشكل مختلف بعض الشيء ، ولهذا ما
زلت أوصي به لجميع الوافدين الجدد الذين لديهم دراية بلغة Java أو المطورين من المستوى المتوسط الذين يرغبون في تعلم المفاهيم المتعلقة بالمنافسة.
إن أهم المواد التي سوف يقدمها لك هذا الكتاب هي مفاهيم وأساسيات واضحة للبرمجة التنافسية ، على وجه الخصوص ، الرؤية ، الطلب ،
أمان الخيط ، عدم
الثبات ، التزامن ، إلخ.
تشرح أيضًا سبب ، في معظم الحالات ، تهجئة تطبيقات Java التنافسية بشكل غير صحيح ، ولماذا يرتكب مبرمجو Java أخطاء شائعة تؤدي إلى مشاكل متعددة المسارات ، بما في ذلك ظروف السباق ، والطريق المسدود ، والحظر النشط ، والتداخل في الذاكرة ، والحسابات غير الصحيحة ببساطة.
يستخدم الكتاب الرموز التي ترافق وصف "كيفية القيام بذلك بشكل خاطئ" ، قبل تقديم القارئ إلى الحل الصحيح وعالي الجودة لهذه المشكلة. وبالتالي فإن الكتاب لا يساعد فقط في التعامل مع المفاهيم الخاطئة التي لدى العديد من مطوري Java ، ولكن أيضًا في غرس مجتمع Java المعلومات الصحيحة حول كيفية العمل مع تعدد العمليات والمنافسة.
ليس هناك شك في أن تعدد العمليات والمنافسة معقدة. ليس من السهل تنفيذها بشكل صحيح في الكود ؛ من الصعب بنفس القدر فهمها وشرحها. أعرف الكثير من المبرمجين الذين لا يستطيعون ببساطة أن يظهروا بصريًا كيف تتفاعل مؤشرات الترابط المختلفة مع عنصر الشفرة نفسه ، والتي تعمل ببيانات مختلفة.
مثل مثال العودية الكلاسيكية ، من السهل جدًا أن يكون التعددية المتعددة ممارسة لبعض المبرمجين ، بينما بالنسبة إلى الآخرين ، يصعب فهم التعدد والتطبيق في سيناريو التطبيق.
إن المساهمة الأكبر لكتاب Java Concurrency in Practice في تطوير عالم Java لا تتمثل في تبسيط المنافسة ، بل تقديم معلومات صحيحة ودقيقة حول هذا الموضوع. منذ ذلك الحين ، أجريت العديد من المقابلات وأعلم أن المبرمجين دائمًا لا يتخيلون بدقة جهاز التدفق وكيفية عمله.
كثير من المبرمجين الذين تمكنوا من العمل مع Java لمدة 4-5 سنوات لا يفهمون
كيفية ترتيب المتغيرات المتقلبة ؛ كل ما يعرفونه هو أنه عند العمل مع متغير قابل للتغيير ، تحتاج إلى التحقق مع كل مقارنة من القيمة الموجودة في الذاكرة الرئيسية. هذا صحيح ، لكن فقط جزء من الحقيقة.
لم يتم إطلاعهم على نموذج ذاكرة Java ، وكيف يمكن للمتغير المتغير أن يؤثر على ترتيب الكود وتنفيذ التعليمات الحسابية في جوهره. يتعلق الأمر باستخدام التحويل البرمجي الديناميكي (
JIT ) و Java Virtual Machine (
JVM ) لتحسين الأداء ؛ مثل هذا التحسين يمكن أن يؤدي إلى أخطاء منطقية خفية.
لا يتم إخبار الأشخاص كيف تسمح لك المتغيرات القابلة للتغيير برؤية ما تم إنجازه في مؤشر ترابط واحد قبل الوصول إلى متغير من مؤشر ترابط آخر ، وما إلى ذلك. لا يعلم الجميع ماهية حاجز الذاكرة وكيف يؤثر على الرؤية.
من كتاب Java Concurrency in Practice قام العديد من مبرمجي Java بدراسة كل هذه المفاهيم. يجب أن أعترف أنني نفسي ، حتى قرأت ذلك ، كنت مخطئًا إلى حد كبير بشأن العديد من القضايا الهامة المتعلقة بمضاعفة مؤشرات الترابط والمنافسة ، ولا سيما التسلسل والرؤية والآثار الضمنية للمتغيرات النهائية والنشر الآمن. الكتاب ساعدني في معرفة ذلك.
بالمناسبة ، إذا كانت بعض أجزاء الكتاب تبدو غير مفهومة بعض الشيء بالنسبة لك - صدقوني ، وليس لك وحدك. هنا نشكر الدكتور هاينز كابوتز ، الذي أوجز مواد الكتاب في شكل مبسط في دورة
Java Concurrency في Practice Bundle .

حتى إذا كانت هذه المادة معقدة للغاية بالنسبة لك ، فإن Heinz لديه دورة أخرى ،
Mastering Threads ، والتي تساعد على فهم تعدد مؤشرات ترابط أي مبرمج جافا متوسط.
الآن دعنا نتحدث عن Java 8 ، أي ما الذي تغير من Java 1.5 إلى Java 8. لقد ظهرت الكثير من الأدوات الجديدة في JDK لتقديم التنافسية وتصميم تطبيقات Java أفضل تنافسية. ظهر
تجمع صلة
الشوكة في JDK 7 ،
و CompleteableFutures
في Java 8. الأهم من ذلك بكثير ، بدءًا من Java 8 ، أصبح أسلوب البرمجة الجديد الأكثر فاعلية ، المزود
بتعبيرات lambda ، ثابتًا.
لدينا أيضًا تدفقات وتدفقات موازية ، مما يتيح للمطورين الاستفادة من القدرة التنافسية دون الحاجة إلى برمجتها. إن الفكرة الكاملة لأخذ تنفيذ المنافسة من مطوري التطبيقات وتفويضها إلى مطوري واجهة برمجة التطبيقات تعمل على تبسيط الموقف من خلال المنافسة في Java قليلاً وتقليل مخاطر تنفيذها.
هذا يعني أيضًا أنه في Java يمكنك إجراء عمليات مجمعة في عدة مؤشرات ترابط باستخدام طريقتين فقط ، دون كتابة سطر واحد من التعليمات البرمجية المتعلقة بالسلسلة ، أو الكلمة المفتاحية المتزامنة ، أو الانتظار وطرق الإخطار.
مما لا شك فيه ، يحتاج أي مطور جافا إلى تعلم هذه الأدوات الجديدة من أجل مواكبة تطور التكنولوجيا - والتي ، بطبيعة الحال ، سوف تساعد في كتاب مثل
Modern Java In Action . لن يقدم لك جميع ابتكارات لغة جافا فقط ، بل سيساعدك أيضًا على تعلم كيفية استخدامها في المهام اليومية ، وفهم الدافع وراء هذه الابتكارات والحصول على فكرة عامة عن لغة جافا الحديثة.

على الرغم من أن كتاب Java Concurrency in Practice في شكله الحالي لا يغطي كل هذه المفاهيم والأدوات المهمة ، إلا أنه لا يزال لا يقدر بثمن لاستكشاف الميزات الرئيسية للغة Java المتعلقة
بالخيوط والتزامن وتعدد مؤشرات الترابط .
لا يزال كتاب غوتز لا بد من قراءته لأي مطور جافا يريد أن يتعلم ويتقن التعددية والقدرة التنافسية - وهي أعظم نقاط قوة جافا في تطوير التطبيقات.
استنادًا إلى ما تقدم ، أود ، مثل العديد من مطوري Java حول العالم ، مشاهدة الإصدار المحدّث من Java Concurrency in Practice ، والذي سينظر في الأدوات والمنهجيات التي ظهرت في Java 6 و 7 و 8 و 9 و 10 وربما حتى في Java 11. بعد كل شيء ،
ظهرت إصدارات محدثة من
أنماط تصميم Java و
Head First الفعالة ، تغطي Java 8 وتوضح مدى سهولة تنفيذ أنماط مختلفة مع الميزات الجديدة في Java 8.