JavaRush /مدونة جافا /Random-AR /المستوى 25. إجابات لأسئلة المقابلة حول موضوع المستوى
zor07
مستوى
Санкт-Петербург

المستوى 25. إجابات لأسئلة المقابلة حول موضوع المستوى

نشرت في المجموعة
المستوى 25. إجابات أسئلة المقابلة حول موضوع المستوى - 1
  1. ما هي جميع حالات الكائن Thread؟

    • جديد
    • قابل للتشغيل
    • محظور
    • منتظر
    • في انتظار الوقت
    • تم الإنهاء
  2. ما الحالات التي يمكن أن ينتقل إليها الخيط عند إدخال الكتلة synchronized؟

    • قابل للتشغيل
    • محظور

    في RUNNABLE، إذا كانت كتلة التعليمات البرمجية المحددة synchronizedغير مشغولة بمؤشر ترابط آخر. بخلاف ذلك، سيتلقى مؤشر الترابط الخاص بنا حالة الحظر وسينتظر حتى يتم تحرير كائن المزامنة.

  3. ما الحالة التي سينتقل إليها الخيط عند استدعاء الطريقة wait()؟

    يؤدي استدعاء هذه الطريقة إلى وضع مؤشر الترابط في حالة الانتظار.
    لا يمكن استدعاء الطريقة wait()إلا داخل كتلة synchronizedعلى كائن كائن المزامنة "mutex" الذي تم "تأمينه" بواسطة مؤشر الترابط الحالي، وإلا ستطرح الطريقة استثناء IllegalMonitorStateException .

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    عندما يتم استدعاء طريقة ما wait()، يقوم الخيط الحالي بتحرير القفل من الكائن monitorويدخل في حالة الانتظار، في انتظار استدعاء الطريقة monitor.notify()بواسطة monitor.notifyAll()مؤشر ترابط آخر. بمجرد حدوث ذلك، سوف يستيقظ الخيط وإذا لم تكن الشاشة مشغولة، فسوف يلتقطها ويستمر في العمل.
    إذا كانت الشاشة مشغولة بخيط آخر، فسينتقل الخيط الحالي إلى حالة الحظر.

  4. ما الحالة التي سينتقل إليها الخيط عند استدعاء الطريقة wait(500)؟

    يؤدي استدعاء هذه الطريقة إلى وضع مؤشر الترابط في حالة TIMED_WAITING.
    قياسًا على الطريقة wait()، wait(timeout)لا يمكن استدعاؤها إلا داخل كتلة synchronizedعلى كائن كائن المزامنة (mutex) الذي تم "تأمينه (تأمينه)" بواسطة الخيط الحالي.

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait(500);}

    عند استدعاء الطريقة wait()، يقوم الخيط الحالي بتحرير القفل من الكائن monitorويدخل في وضع السكون لمدة 500 مللي ثانية. monitorقد يتم التقاط الكائن بواسطة مؤشر ترابط آخر.
    بعد 500 مللي ثانية، سيستيقظ الخيط، وإذا monitorلم يكن مشغولا، فسوف يلتقطه ويستمر في العمل.
    إذا كانت الشاشة مشغولة بخيط آخر، فسينتقل الخيط الحالي إلى حالة الحظر.

    ما الحالة التي سينتقل إليها الخيط عند استدعاء الطريقة notify()؟

    Object monitor = getMonitor();
    synchronized(monitor)
    {
     …
     monitor.wait();}

    بعد ذلك monitor.wait()، سينتقل الخيط إلى حالة الانتظار. ستنقل الطريقة notify()التي يتم استدعاؤها بواسطة مؤشر ترابط آخر على كائن ما monitorمؤشر الترابط من حالة الانتظار إلى حالة التشغيل ما لم يتم التقاط كائن المراقبة بواسطة مؤشر ترابط آخر، وإلا إلى الحالة المحظورة.

  5. ما الحالة التي سينتقل إليها الخيط عند استدعاء الطريقة notifyAll()؟

    notifyAll()"سيبقى" جميع المواضيع. ستنتقل إحدى سلاسل العمليات "النائمة" (الانتظار) إلى حالة التشغيل، وتتولى مراقبة الكائن المستخدم وتستمر في عملها. الباقي سيكون في حالة الحظر. بمجرد أن يقوم خيط "الاستيقاظ" الأول بتحرير الشاشة، والتي ينتظرها الجميع، سيتم تكرار مصيرها بواسطة الخيط التالي (سينتقل الخيط التعسفي من الحالة المحظورة إلى الحالة القابلة للتشغيل). سيستمر هذا حتى تترك كافة سلاسل الرسائل "المنشطة" حالة الحظر.

  6. ثلاثة سلاسل في الكتلة المتزامنة تسمى wait()كائن Mutex. ما الحالة التي ستنتقل إليها هذه المواضيع في حالة استدعاء الخيط الرابع notifyAll()؟

    سينتقل اثنان منهم إلى الحالة المحظورة، والآخر إلى الحالة القابلة للتشغيل

  7. كيف يختلف join(500)عن wait(500)؟

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

  8. كيف يختلف wait(500)عن sleep(500)؟

    sleep(500)يتم استدعاؤه على مؤشر ترابط، wait(500)ويتم استدعاؤه داخل كتلة متزامنة على الكائن الذي تتم مزامنة هذه الكتلة عليه.
    عند الاتصال، sleep(500)سينتظر الخيط الحالي 500 مللي ثانية، ثم يواصل عمله.
    عند الاتصال، wait(500)سيحرر الخيط الحالي القفل من الكائن المتزامن ويدخل في وضع السكون لمدة 500 مللي ثانية.

  9. ما الحالة التي سينتقل إليها الخيط عند استدعاء الطريقة yield()؟

    عندما يتم استدعاء الأسلوب yield()، فإن الخيط الحالي "يتخطى دوره" وتتحول Java على الفور إلى تنفيذ الخيط التالي. الخيط ينتقل من دولة runningإلى أخرى ready. حالات التشغيل والجاهزية هي حالات فرعية للحالة RUNNABLE.

تعليقات PS والإضافات والتصحيحات والملاحظات هي موضع ترحيب =)
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION