دورة حياة الخيط في جافا – حالات الخيط في جافا

فهم دورة حياة الخيط في جافا وحالات الخيط مهم جداً عند العمل مع الخيوط وبرمجة البيئة متعددة الخيوط. من خلال آخر درس لنا، يمكننا إنشاء فئة خيط جافا عن طريق تنفيذ واجهة Runnable أو عن طريق تمديد فئة Thread، ولكن لبدء خيط جافا، يجب علينا أولاً إنشاء كائن Thread واستدعاء طريقته start() لتنفيذ طريقة run() كخيط.

دورة حياة الخيط في جافا

الشكل أدناه يوضح حالات مختلفة لدورة حياة الخيط في جافا. يمكننا إنشاء خيط في جافا وتشغيله، ولكن كيفية تغيير حالات الخيط من Runnable إلى Running إلى Blocked تعتمد على تنفيذ جدول المواعيد للخيط في نظام التشغيل، وجافا ليس لديها السيطرة الكاملة على ذلك.

جديد

عند إنشاء كائن Thread جديد باستخدام المشغل new، يكون حالة الموضوع هي New Thread. في هذه النقطة، الموضوع ليس حيًا وإنما هو حالة داخلية في برمجة Java.

Runnable

عندما نستدعي وظيفة start() على كائن Thread، يتم تغيير حالته إلى Runnable. يتم إعطاء التحكم إلى جدول المواضيع لإنهاء تنفيذه. ما إذا كان سيتم تشغيل هذا الموضوع فورًا أو الاحتفاظ به في مجموعة مواضيع Runnable قبل التشغيل، يعتمد على تنفيذ نظام التشغيل للموضوع.

Running

عندما يكون الموضوع في حالة التنفيذ، تتغير حالته إلى Running. يختار جدول المواضيع أحد المواضيع من مجموعة المواضيع القابلة للتشغيل ويقوم بتغيير حالته إلى Running. ثم يبدأ وحدة المعالجة المركزية في تنفيذ هذا الموضوع. يمكن للموضوع تغيير حالته إلى Runnable، Dead، أو Blocked من حالة التشغيل اعتمادًا على تجزئة الوقت، استكمال الموضوع لطريقة run()، أو انتظار بعض الموارد.

Blocked/Waiting

A thread can be waiting for other thread to finish using thread join or it can be waiting for some resources to available. For example producer consumer problem or waiter notifier implementation or IO resources, then it’s state is changed to Waiting. Once the thread wait state is over, it’s state is changed to Runnable and it’s moved back to runnable thread pool.

Dead

بمجرد أن ينتهي التسلسل من التنفيذ، يتم تغيير حالته إلى “ميت” ويعتبر غير حي. أعلاه هي مختلفة حالات التسلسل. من الجيد معرفة تلك الحالات وكيف يقوم التسلسل بتغيير حالته. هذا كل شيء بالنسبة لدورة حياة التسلسل في جافا.

Source:
https://www.digitalocean.com/community/tutorials/thread-life-cycle-in-java-thread-states-in-java