المقدمة
يمكن استخدام طريقة Thread.sleep()
في جافا لإيقاف تنفيذ الخيط الحالي لفترة زمنية محددة بالميلي ثانية. قيمة الوسيطة للميلي ثانية لا يمكن أن تكون سالبة. في حالة كانت سالبة، فإنه يُلقي استثناء IllegalArgumentException
.
sleep(long millis, int nanos)
هي طريقة أخرى يمكن استخدامها لإيقاف تنفيذ الخيط الحالي لعدد محدد من الميلي ثانية والنانو ثانية. القيم المسموح بها للنانو ثانية تتراوح بين 0
و 999999
.
في هذا المقال، ستتعرف على Thread.sleep()
في جافا.
كيفية عمل Thread.sleep
Thread.sleep()
تتفاعل مع جدول الخيط لوضع الخيط الحالي في حالة انتظار لفترة زمنية محددة. بمجرد انتهاء الوقت المحدد للانتظار، يتم تغيير حالة الخيط إلى حالة جاهزة للتنفيذ وينتظر الوحدة المعالجة المركزية للمزيد من التنفيذ. الوقت الفعلي الذي ينام فيه الخيط الحالي يعتمد على جدول الخيوط الذي يتم جزءًا منه في نظام التشغيل.
نقاط مهمة حول Thread.sleep في جافا
- يوقف دائمًا تنفيذ الخيط الحالي.
- الوقت الفعلي الذي ينام فيه الخيط قبل الاستيقاظ وبدء التنفيذ يعتمد على المؤقتات والجداول الزمنية للنظام. بالنسبة لنظام هادئ، يكون الوقت الفعلي للنوم قريبًا من الوقت المحدد للنوم، ولكن بالنسبة لنظام مشغول، قد يكون أطول قليلاً.
Thread.sleep()
لا يفقد أي مراقبات أو يقفل الخيط الحالي الذي اكتسبه.- يمكن لأي خيط آخر اقتحام الخيط الحالي أثناء النوم، وفي مثل هذه الحالات يتم رمي استثناء
InterruptedException
.
مثال على Thread.sleep في جافا
فيما يلي برنامج مثال حيث يتم استخدام Thread.sleep()
لإيقاف تنفيذ الخيط الرئيسي لمدة 2 ثانية (2000 ميلي ثانية):
package com.journaldev.threads;
public class ThreadSleep {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(2000);
System.out.println("Sleep time in ms = " + (System.currentTimeMillis() - start));
}
}
أولاً، يقوم هذا الكود بتخزين الوقت الحالي للنظام بالميلي ثانية. ثم ينام لمدة 2000 ميلي ثانية. وأخيرًا، يقوم هذا الكود بطباعة الوقت الحالي الجديد ناقص الوقت الحالي السابق:
OutputSleep time in ms = 2005
لاحظ أن هذا الفرق ليس بالضبط 2000 ميلي ثانية. هذا بسبب كيفية عمل Thread.sleep()
وتنفيذ الجدول الزمني الخاص بنظام التشغيل.
الختام
في هذا المقال، تعلمت عن Thread.sleep()
في جافا.
واصل تعلمك مع المزيد من الدروس التعليمية في جافا.
Source:
https://www.digitalocean.com/community/tutorials/thread-sleep-java