خيط حاسوبي
الــ Threads او الخيوط الحاسوبيه
في الغالب نحن معتادون على تعدد المهام في نظام التشغيل; السماحيه لعمل أكثر من برنامج في وقت واحد.
Multithreaded programs تآخذ فكرة تعدد المهام عن طريق اخذها في مستوى اقل;
كل برنامج فردي يظهر عدة مهام في نفس الوقت و كل مهمه تسمى خيط (حاسوب).
تستطيع البرامج تشغيل أكثر من خيط (حاسوب) في نفس الوقت وهي اختصار لـ خيط التحكم
والبرامج التي تستطيع تشغيل أكثر من خيط حاسوبي في كل مره تسمى متعددة الخيوط الحاسوبية.
عندما تكون كل عمليه لديها وضعيه متكامله من المتغيرات متغير (علم الحاسوب)
threads تشاركها نفس المعلومات، وهذا قد يشكل خطرًا. مع ذلك مشاركة المتغيرات تجعل الاتصال بين الخيوط threads أسهل وأفضل للبرمجه من الاتصال بين العمليات.
واذا اطلعنا على GUI كل منها يحمل thread منفصل يجمع الحدث ليراه المستخدم من بيئة تشغيل المضيف
اذا نظرنا في برنامج لا يستخدم الخيوط الحاسوبيه المتعدده multiple threads
يصعب على المستخدم ان يؤدي عدة مهام في هذا البرنامج اما اذا كان هناك برنامج
دالة thread.sleep لا تنشأ داله جديدة بل هي دالة ثابته في مصفوفة خيط (حاسوب)
بشكل مؤقت توقّف عمل النشاط الذي يستخدم الـ خيط (حاسوب) الحالي
ممكن ان يكون في واحده من هذه الحالات 
لتحديد حالة الـ thread الحالي، دالة getState()
عندما تنشآ thread بأداة التشغيل new 
مثال: new Thread(r) - the thread is not running yet
هنا الخيط لم يتم تشغيله بعد، وهذا يعني ان البرنامج لم ينفذ الشفره (codes). هناك كميه معينه من الحسابات التي تحتاج ان تنتهي قبل تشغيل الـ خيط (thread)
عندما تنفذ دالة start، الخيط الحاسوبي (thread) يكون في حالة runnable state
تعتمد runnable state على نظام التشغيل في العمل.
عندما يعمل الخيط thread ليس من الضروري ان يبقى قيد التشغيل، ولكن يستحق التشغيل اذا كان هناك الكثير من الـ running threads وتوقفت لسبب فهنا تأتي 
الفرصه للخيوط الاخرى بالعمل.
تفاصيل الخيوط threads تعتمد على الخدمه التي يوفرها نظام التشغيل. نظام المنظم scheduler system يعطي runnable thread جزء من الوقت ليؤدي مهامه.
عندما نختار الـ thread التالي نظام التشغيل يأخذ في الحسبان اولوية الـthread 
عندما يكون الخيط محظور (blocked) او في الانتظار (waiting). هو مؤقتًا غير فعال لاينفّذ اي شفره ويستهلك مصادر أقل 
ويعتمد ايضا على thread scheduler لاعادة التشغيل وهذه التفاصيل تعتمد على كيفة الوصول إلى الحاله الغير مفعله.
عندما يحاول thread ان يكتسب كائن محظور ( lock) لايتضمن حظره على java.util.concurrent library .
الـ thread يصبح غير محظور ( unblocked) عندما تكون كل الخيوط threads تنازلت عن الحظر و thread scheduler يسمح لهذه الخيوط ان تمسك بهذا الكائن.
عندما ينتظر الخيط خيط اخر لينبه منظم الخيوط ( thread scheduler) لحاله معينه، يدخل في حالة الانتظار
وهذا يحدث عن طريق نداء دالة Object.wait or Thread.wait
او عن طريق انتظار lock او condition في java.util.concurrent library
الكثير من الدوال تحتوي على parameters غير ثابته خارج الوقت timeout.
وهذه الحاله تستمر حتى نفاذ الوقت او ان تتلقى المنبه الصحيح
دوال timeout تتضمن Threas.sleep و timed version of
Object.wait, Thread.join, lock.tryLock and Condition.await
يمكن ان يتنقل الـ الخيط من حاله لاخرى عندما يكون الخيط محظور او في الانتظار وايضا عندما يخرج من البرنامج يأتي خيط آخر ينظم التشغيل.
يقطع الــthread لسبب من هذه الاسباب:يمكن قتل الـ Thread بتنفيذ دالة stop وهذه الداله throws ThreadDeath error تلقي كائن يقتل الـ thread
في لغة البرمجه كل خيط له اولويه وكل خيط يورّث اولويه للخيط الذي ينشأه.
ويمكن زياده او انقاص اولوية اي خيط عن طريق دالة setPriority تستطيع ضبط الاولويه لأي قيمه بين
MIN_PRIORITY (معرفه كـ 1 في Thread class )
و MAX_PRIORITY معرفه كـ 10 NORM_PRIORITY معرف كـ 5. 
كلما اتيحت الفرصه لمنظم الخيوط ان يختار خيط جديد يفضل ذا اولويه عاليه.
اولويات الخيوط هي highly system dependent, عندما تعتمد الآله الفعليه على تطبيق الخيط لبرنامج المضيف الذي
يحتوي على خيط او أكثر من مستويات الاولويه
مثال: Windows يحمل 7 مستويات للاولويه.
بعض اولويات الجافا تشير إلى نفس مستوى نظام التشغيل في The Sun JVM for Linux كل الخيوط تحتوي على نفس المستوى
تستطيع تحويل الخيط او thread إلى daemon thread بمناداة دالة
وظيفته الوحيده هي خدمة الغير، مثال: timer thread وظيفته يرسل الدقّات المعتاده للساعه للخيوط الاخرى او الخيط الذي ينظف catche من البقايا القديمه.
الآله الفعليه virtual machine تخرج اذا كانت كل الخيوط Daemon Threads 
لانه لامعنى لعمل البرنامج اذا كانت كل الخيوط Daemon