Lecture tread
- 3. THREAD ОЙЛГОЛТ
Програмд нэг зэрэг олон үйлдэл гүйцэтгэх
боломж олгоно
– Жишээ нь сервер програм олон клиентүүдтэй
зэрэг ажиллах
– График анимац ажиллаж байхад хэрэглэгч өөр
үйлдлүүдийг хийх боломж олгох
– Хоёр болон түүнээс дээш анимац зэрэг ажиллах
боломж олгох
- 4. THREAD ОЙЛГОЛТ
Хэрэглэгчийн зохиосон програм нь ядаж нэг
thread ашигласан байдаг
– Хэрэглэгч thread –ийг үүсгээгүй үед ч хэрэглэгчийн
зохиосон програм хангамж нь өөрөө thread болдог
- 5. THREAD ОЙЛГОЛТ
Дараах жишээгээр thread –ийг тайлбарлая
– Файлаас өгөгдлийг хэсэг хэсгээр нь уншиж
боловсруулаад өөр файлд бичдэг програм
- 6. THREAD ОЙЛГОЛТ
Thread ашигласан эхний жишээ:
– Програм эхний хэсгийг уншиж боловсруулаад
файлдаа бичингүүтээ дараачийн хэсгийг авах
замаар ажиллана. Энэ тохиолдолд бид уг
процессийг дуусгахын тулд нэг thread ашиглаж
байна.
- 7. THREAD ОЙЛГОЛТ
Thread ашигласан хоёрдугаар жишээ:
– Дээрх жишээн дээрх үйлдлийг гурван thread
ашиглан гүйцэтгэе.
– Эхний thread файлаас хэсэг хэсгээр уншиж байхад
хоёр дахь thread нь уншсан хэсгийг боловсруулж
гурав дахь thread нь боловсруулсан хэсгийг өөр
файлд бичих үйлдлийг хийнэ.
- 8. THREAD ОЙЛГОЛТ
Хоёр дахь жишээн дээр гурван ширхэг thread
ашигласан нь:
– Нэгэнт энэ гурван thread зэрэг ажиллах тул эхний
жишээн дээрх програмыг бодвол илүү богино
хугацаанд ажиллах чадвартай.
- 9. THREAD ОЙЛГОЛТ
Хоёр дахь жишээн дээр нэг асуудал үүснэ:
– Хоёр дахь thread нь эхний thread-ийг өгөгдлөө
уншиж дууссаны дараа л боловсруулалт хийх
ёстой.
– Тиймээс програм зохиогч thread хооронд мэдээлэл
дамжуулах шаардлага гарна.
- 10. THREAD ҮҮСГЭХ
Thread классын объект эсвэл уг классаас
удамшсан классын объектийг үүсгэх замаар
програмд thread –ийг үүсгэнэ.
Thread –ийг үүсгэснийхээ дараа start()
функцыг нь дуудаж ажиллуулна.
- 11. THREAD ҮҮСГЭХ
Thread-ийн ажиллуулдаг код нь run() функц
дотор байдаг бөгөөд энэ функцыг програм
зохиогч бичиж өгдөг. Start() функц нь
ажиллагаагаа эхлүүлэхдээ run() функцыг
дууддаг.
Thread нь өөрөө дотроо дахин thread үүсгэх
замаар ажиллаж болно
- 12. THREAD ҮҮСГЭХ
Thread үүсгэхэд анхаарах зүйлс:
– Thread –ийг үйлдлийн систем үүсгэж ажиллуулдаг
– Thread нь хэрэглэгчийн зохиосон програмтай зэрэг
ажиллах чадвартай байдаг.
– Thread нь хэрэглэгчийн зохиосон програмаас
тусдаа бие даасан програм юм.
- 13. THREAD ҮҮСГЭХ
Thread үүсгэхэд анхаарах зүйлс:
– Start() функц нь үйлдлийн системд шинээр thread
үүсгэн ажиллуулахыг зааж өгдөг.
– Хэрэв шууд run() функцыг програм дотроосоо
дуудвал (өөрөөр хэлбэл start() функцыг
дуудалгүйгээр) програмд гажилт үүсдэг.
- 14. THREAD ҮҮСГЭХ
Thread-ийг хоёр хэлбэрээр үүсгэж болдог.
– Thread классын объект эсвэл уг классаас
удамшсан классын объектийг үүсгэх замаар
– Runnable интерфэйсийн имплемент хийсэн
классын объектийг үүсгэх замаар
- 15. THREAD ҮҮСГЭХ
Main thread: Програмын үндсэн функцыг
ажиллуулахад програмын үндсэн thread үүсэх
бөгөөд үүнийг main thread гэнэ.
Daemon thread: Үндсэн thread-ийг хаахад
үндсэн thread-ийн үүсгэсэн thread-үүд нь хамт
үхэж байвал эдгээр нь daemon thread юм.
setDaemon(true) гэж thread-ийг daemon
болгоно
- 16. THREAD ҮҮСГЭХ
Хэрэв үндсэн thread-үүдийг хаахад
үхэлгүйгээр үлдэж байвал энэ thread нь
хэрэглэгчийн thread юм.
- 21. THREAD ХЭРЭГЛЭЭ
Сервер програмын бүтэц
– Сервер програм нь ажиллаж эхлэнгүүтээ гаднаас
ирэх хүсэлтүүдийг сонсох зорилготой хэд хэдэн
сонсогч daemon thread-үүдийг үүсгэдэг
– Хэрэв гаднаас нэг хүсэлт ирвэл эдгээр thread-
үүдийн аль нэг нь уг хүсэлтийг барьж аваад
хүсэлтийг боловсруулах үүрэгтэй өөр нэг
хэрэглэгчийн thread үүсгэдэг.
- 23. THREAD ХЭРЭГЛЭЭ
үргэлжлэл
– Сервер програмыг хаахад сонсогч thread-ууд хамт
хаагдаж байвал daemon thread харин хүсэлтийг
боловсруулж байгаа thread үйл ажиллагаагаа
үргэлжлүүлэн үлдэж байвал хэрэглэгчийн thread
болно.
– Ингэснээр програмын найдвартай байдал
нэмэгддэг.
- 24. THREAD POOL
Сервер програмын бүтэц
– Сервер нь төгсгөлгүй олон thread үүсгэж мэдээж
болохгүй. thread олон үүсэх тусам сервер
компьютер дээрх ачаалал нэмэгддэг.
– Энэ асуудлыг шийдвэрлэх зорилгоор сервер
програм нь thread pool хэмээх зүйлийг хэрэглэдэг.
- 25. THREAD POOL
– Сервер нь thread pool үүсгэн түүн дотор тодорхой
тооны thread-үүдийг үүсгэж хийдэг.
– Хэрэв серверт хүсэлт ирвэл түүнийг цөөрөм
доторх сул thread-д өгнө.
– Харин бүх thread –үүд ажилтай байвал уг
хүсэлтийг биелүүлэх шинэ thread үүсгэхгүй.
– Серверт ирсэн хүсэлт нь цөөрөм дэх аль нэг
thread ажлаа дуусган сулрахыг хүлээнэ.
- 26. THREAD run() функц
run() функц доторх код нь thread-ийг
ажиллуулах код юм. Энэ функц нь Thread
классаас удамшин ирдэг.
Thread класс доторх run() функц нь кодгүй
байдаг тул програм зохиогч кодыг бичих
шаардлагатай.
- 27. THREAD run() функц
sleep(millsecond) функц нь заагдсан
хугацаагаар thread –ийн үйл ажиллагааг
зогсоодог. Энэ нь бусад thread –ийг ажиллах
боломжийг олгодог.
sleep() функцыг ашиглах тохиолдолд try catch
хэрэглэх ёстой. Учир нь thread –ийг унтаж
байх хугацаанд нь өөр бусад зүйл сэрээвэл
InterruptedException дуудагдана.
- 28. THREAD ОЙЛГОЛТ
Өөр thread-ээс одоо ажиллаж буй thread –ийг
үйл ажиллагаагаа зогсоохыг хүсч болно. Энэ
тохиолдолд уг ажиллаж буй thread –ийн
interrupt() функцыг дуудна.
- 29. THREAD ОЙЛГОЛТ
Энэ функц нь уг thread-ийг шууд зогсоохгүй
боловч зогсоохыг хүссэн флагийг true
болгодог.
Харин ажиллаж буй thread-ийн run() функц
дотор энэ флагийг true болсон эсэхийг
шалгаж байх хэрэгтэй.
- 30. THREAD ОЙЛГОЛТ
sleep() функц нь энэ флагийг шалгаад true
болсон байвал InterruptedException үүсгэдэг.
Thread-ийг interrupt хийсэн эсэхийг шалгахдаа
isInterrupted() функцыг дуудаж болно. Хэрэв
уг thread-ийг interrupt хийсэн байсан бол энэ
функц нь true утга буцаадаг.
- 31. THREAD ОЙЛГОЛТ
Өөр thread дотроос өөр thread –ийг interrupt
болсон эсэхийг энэ функцыг ашиглаж шалгаж
болно.
Жишээ нь үндсэн thread дотроос first thread –
ийг шалгахдаа:
- 32. THREAD ОЙЛГОЛТ
Гэхдээ энэ нь first thread-ийг үйл
ажиллагаагаа зогсоосон эсэхийг баталгаатай
хэлж чадахгүй.
– Учир нь first thread interrupt хүсэлтийг авсан ч үйл
ажиллагаагаа үргэлжлүүлсээр байж болно.
Үйл ажиллагаагаа үнэхээр зүгсоосон эсэхийг
шалгахдаа isAlive() функцыг ашиглан
шалгадаг.
- 33. THREAD ОЙЛГОЛТ
isInterrupted() функц нь уг thread-ийн флагт
өөрчлөлт оруулдаггүй бол interrupted() функц
нь флагыг шалгаад үнэн бол цэвэрлээд (false
болгоод) true утга буцаадгаараа ялгаатай.
InterruptedException үүссэн бол thread нь
catch хэсгээрээ барьж аваад уг флагаа
цэвэрлэдэг тул үүний дараа дуудагдсан
isInterrupted(), interrupted() функцууд нь false
утга буцаана.
- 34. THREAD ОЙЛГОЛТ
Хэрэв ямар нэг thread –ийг одоо ажиллаж буй
thread –ийг ажиллаж дуустал хүлээлгэх хэрэг
гарвал уг thread –ийн join() функцыг дуудна.
– thread1.join()