1. التحكم في الخيط شائع جدًا.
2. الخيوط لها خمس ولايات: الخلق ، التشغيل ، العملية ، الحجب ، والموت.
إنشاء: إنشاء مؤشر ترابط باستخدام المشغل الجديد
قابل للتشغيل: بعد بدء سلسلة رسائل باستخدام طريقة البدء ، يخصص النظام الموارد
حالة التشغيل: تشغيل طريقة تنفيذ الموضوع
الحظر: يتوقف مؤشر الترابط الجري عن الركض لسبب ما
حالة الوفاة: الموضوع ينتهي
3. قضايا السلامة من الأساليب التقليدية
لم يعد إيقاف الموضوع () ، تعليق () ، استئناف () ، تدمير () ، وتدمير () أساليب لم يعد يستخدم لأنها غير آمنة وقد تتسبب في حالات الجمود.
4. كيفية التحكم في تشغيل المواضيع
على سبيل المثال ، إذا استغرق نقل ملف ما 10 ثوانٍ ، فدعه يتم نقله إلى لحظة معينة ثم متابعة حتى يكتمل النقل. استخدم الطريقة لتنفيذ Runnable ، أولاً وقبل كل شيء ، الفئة القابلة للتشغيل لنقل الملفات
الرمز كما يلي:
نسخة الكود كما يلي:
الطبقة العامة ThreadControlTest1 تنفذ Runnable
{
Private int في المئة = 0 ؛
تشغيل الفراغ العام ()
{
بينما (صحيح)
{
System.out.println ("التقدم النقل:" + ٪ + "٪") ؛
يحاول
{
thread.sleep (1000) ؛
}
Catch (استثناء EX)
{}
النسبة المئوية += 10 ؛
إذا (في المئة == 100)
{
System.out.println ("الانتقال المكتمل") ؛
استراحة؛
}
}
}
الفراغ الثابت العام (سلسلة [] args)
{
ThreadControlTest1 ft = new ThreadControlTest1 () ؛
الموضوع Th = موضوع جديد (Ft) ؛
th.start () ؛
}
}
5. قم بتشغيل عملية محاكاة نقل ملف الطباعة على وحدة التحكم. يمكن أن نرى أنه إذا تم تشغيل كائن هذه الفئة كخيط ، فسيتم تنفيذ الحلقة 10 مرات ثم الخروج.
ومع ذلك ، تحتاج إلى إيقاف تشغيل الخيط (مثل دقيقة واحدة) في لحظة معينة (مثل 5 ثوانٍ لاحقًا) ، لكن لا يمكنك استخدام وظائف الخيط.
لحل هذه المشكلة ، فإن الأساليب الشائعة هي كما يلي:
1. عندما يكون من الضروري التوقف مؤقتًا ، ببساطة اترك طريقة تشغيل مؤشر الترابط تنتهي إلى موارد مجانية (في الواقع ، دع الخيط ينتهي بشكل دائم)
2. عندما يحتاج الخيط إلى المتابعة ، سيتم فتح موضوع جديد لمواصلة العمل.
كيفية جعل طريقة التشغيل تنتهي؟
6. يمكن تغيير الرمز أعلاه إلى ما يلي:
نسخة الكود كما يلي:
الطبقة العامة ThreadControlTest1 تنفذ Runnable
{
Private int في المئة = 0 ؛
منطقية خاصة ISRUN = صواب ؛
تشغيل الفراغ العام ()
{
بينما (Isrun)
{
System.out.println ("التقدم النقل:" + ٪ + "٪") ؛
يحاول
{
thread.sleep (1000) ؛
}
Catch (استثناء EX)
{}
النسبة المئوية += 10 ؛
إذا (في المئة == 100)
{
System.out.println ("الانتقال المكتمل") ؛
استراحة؛
}
}
}
الفراغ الثابت العام (سلسلة [] args)
{
ThreadControlTest1 ft = new ThreadControlTest1 () ؛
الموضوع Th = موضوع جديد (Ft) ؛
th.start () ؛
يحاول
{
thread.sleep (5000) ؛
} catch (استثناء EX)
{}
ft.isrun = false ؛
System.out.println ("توقف لمدة دقيقة واحدة") ؛
يحاول
{
thread.sleep (1000*60) ؛
} catch (استثناء EX)
{}
ft.isrun = صحيح ؛
Th = موضوع جديد (قدم) ؛
th.start () ؛
}
}