SlideShare a Scribd company logo
Жава
Технологи
Улаанбаатар Дээд Сургууль
Бэлтгэсэн: Багш Б.Ганзориг
THREAD
Агуулга:
 Tread ойлголт
 Tread үүсгэх
 Tread pool
 Tread хоорондын нөөцийн хуваарилалт
THREAD ОЙЛГОЛТ
 Програмд нэг зэрэг олон үйлдэл гүйцэтгэх
боломж олгоно
– Жишээ нь сервер програм олон клиентүүдтэй
зэрэг ажиллах
– График анимац ажиллаж байхад хэрэглэгч өөр
үйлдлүүдийг хийх боломж олгох
– Хоёр болон түүнээс дээш анимац зэрэг ажиллах
боломж олгох
THREAD ОЙЛГОЛТ
 Хэрэглэгчийн зохиосон програм нь ядаж нэг
thread ашигласан байдаг
– Хэрэглэгч thread –ийг үүсгээгүй үед ч хэрэглэгчийн
зохиосон програм хангамж нь өөрөө thread болдог
THREAD ОЙЛГОЛТ
 Дараах жишээгээр thread –ийг тайлбарлая
– Файлаас өгөгдлийг хэсэг хэсгээр нь уншиж
боловсруулаад өөр файлд бичдэг програм
THREAD ОЙЛГОЛТ
 Thread ашигласан эхний жишээ:
– Програм эхний хэсгийг уншиж боловсруулаад
файлдаа бичингүүтээ дараачийн хэсгийг авах
замаар ажиллана. Энэ тохиолдолд бид уг
процессийг дуусгахын тулд нэг thread ашиглаж
байна.
THREAD ОЙЛГОЛТ
 Thread ашигласан хоёрдугаар жишээ:
– Дээрх жишээн дээрх үйлдлийг гурван thread
ашиглан гүйцэтгэе.
– Эхний thread файлаас хэсэг хэсгээр уншиж байхад
хоёр дахь thread нь уншсан хэсгийг боловсруулж
гурав дахь thread нь боловсруулсан хэсгийг өөр
файлд бичих үйлдлийг хийнэ.
THREAD ОЙЛГОЛТ
 Хоёр дахь жишээн дээр гурван ширхэг thread
ашигласан нь:
– Нэгэнт энэ гурван thread зэрэг ажиллах тул эхний
жишээн дээрх програмыг бодвол илүү богино
хугацаанд ажиллах чадвартай.
THREAD ОЙЛГОЛТ
 Хоёр дахь жишээн дээр нэг асуудал үүснэ:
– Хоёр дахь thread нь эхний thread-ийг өгөгдлөө
уншиж дууссаны дараа л боловсруулалт хийх
ёстой.
– Тиймээс програм зохиогч thread хооронд мэдээлэл
дамжуулах шаардлага гарна.
THREAD ҮҮСГЭХ
 Thread классын объект эсвэл уг классаас
удамшсан классын объектийг үүсгэх замаар
програмд thread –ийг үүсгэнэ.
 Thread –ийг үүсгэснийхээ дараа start()
функцыг нь дуудаж ажиллуулна.
THREAD ҮҮСГЭХ
 Thread-ийн ажиллуулдаг код нь run() функц
дотор байдаг бөгөөд энэ функцыг програм
зохиогч бичиж өгдөг. Start() функц нь
ажиллагаагаа эхлүүлэхдээ run() функцыг
дууддаг.
 Thread нь өөрөө дотроо дахин thread үүсгэх
замаар ажиллаж болно
THREAD ҮҮСГЭХ
 Thread үүсгэхэд анхаарах зүйлс:
– Thread –ийг үйлдлийн систем үүсгэж ажиллуулдаг
– Thread нь хэрэглэгчийн зохиосон програмтай зэрэг
ажиллах чадвартай байдаг.
– Thread нь хэрэглэгчийн зохиосон програмаас
тусдаа бие даасан програм юм.
THREAD ҮҮСГЭХ
 Thread үүсгэхэд анхаарах зүйлс:
– Start() функц нь үйлдлийн системд шинээр thread
үүсгэн ажиллуулахыг зааж өгдөг.
– Хэрэв шууд run() функцыг програм дотроосоо
дуудвал (өөрөөр хэлбэл start() функцыг
дуудалгүйгээр) програмд гажилт үүсдэг.
THREAD ҮҮСГЭХ
 Thread-ийг хоёр хэлбэрээр үүсгэж болдог.
– Thread классын объект эсвэл уг классаас
удамшсан классын объектийг үүсгэх замаар
– Runnable интерфэйсийн имплемент хийсэн
классын объектийг үүсгэх замаар
THREAD ҮҮСГЭХ
 Main thread: Програмын үндсэн функцыг
ажиллуулахад програмын үндсэн thread үүсэх
бөгөөд үүнийг main thread гэнэ.
 Daemon thread: Үндсэн thread-ийг хаахад
үндсэн thread-ийн үүсгэсэн thread-үүд нь хамт
үхэж байвал эдгээр нь daemon thread юм.
 setDaemon(true) гэж thread-ийг daemon
болгоно
THREAD ҮҮСГЭХ
 Хэрэв үндсэн thread-үүдийг хаахад
үхэлгүйгээр үлдэж байвал энэ thread нь
хэрэглэгчийн thread юм.
THREAD ЖИШЭЭ
THREAD ЖИШЭЭ
THREAD ЖИШЭЭ
THREAD ЖИШЭЭ
THREAD ХЭРЭГЛЭЭ
 Сервер програмын бүтэц
– Сервер програм нь ажиллаж эхлэнгүүтээ гаднаас
ирэх хүсэлтүүдийг сонсох зорилготой хэд хэдэн
сонсогч daemon thread-үүдийг үүсгэдэг
– Хэрэв гаднаас нэг хүсэлт ирвэл эдгээр thread-
үүдийн аль нэг нь уг хүсэлтийг барьж аваад
хүсэлтийг боловсруулах үүрэгтэй өөр нэг
хэрэглэгчийн thread үүсгэдэг.
THREAD ХЭРЭГЛЭЭ
үргэлжлэл
– Ингэснээр олон зэрэг хүсэлтэй ажиллах
боломжтой болно.
– Хүсэлт бүрийг нэг thread биелүүлдэг.
– Хүсэлтийг биелүүлж дуусангуутаа уг thread өөрөө
устдаг.
THREAD ХЭРЭГЛЭЭ
үргэлжлэл
– Сервер програмыг хаахад сонсогч thread-ууд хамт
хаагдаж байвал daemon thread харин хүсэлтийг
боловсруулж байгаа thread үйл ажиллагаагаа
үргэлжлүүлэн үлдэж байвал хэрэглэгчийн thread
болно.
– Ингэснээр програмын найдвартай байдал
нэмэгддэг.
THREAD POOL
 Сервер програмын бүтэц
– Сервер нь төгсгөлгүй олон thread үүсгэж мэдээж
болохгүй. thread олон үүсэх тусам сервер
компьютер дээрх ачаалал нэмэгддэг.
– Энэ асуудлыг шийдвэрлэх зорилгоор сервер
програм нь thread pool хэмээх зүйлийг хэрэглэдэг.
THREAD POOL
– Сервер нь thread pool үүсгэн түүн дотор тодорхой
тооны thread-үүдийг үүсгэж хийдэг.
– Хэрэв серверт хүсэлт ирвэл түүнийг цөөрөм
доторх сул thread-д өгнө.
– Харин бүх thread –үүд ажилтай байвал уг
хүсэлтийг биелүүлэх шинэ thread үүсгэхгүй.
– Серверт ирсэн хүсэлт нь цөөрөм дэх аль нэг
thread ажлаа дуусган сулрахыг хүлээнэ.
THREAD run() функц
 run() функц доторх код нь thread-ийг
ажиллуулах код юм. Энэ функц нь Thread
классаас удамшин ирдэг.
 Thread класс доторх run() функц нь кодгүй
байдаг тул програм зохиогч кодыг бичих
шаардлагатай.
THREAD run() функц
 sleep(millsecond) функц нь заагдсан
хугацаагаар thread –ийн үйл ажиллагааг
зогсоодог. Энэ нь бусад thread –ийг ажиллах
боломжийг олгодог.
 sleep() функцыг ашиглах тохиолдолд try catch
хэрэглэх ёстой. Учир нь thread –ийг унтаж
байх хугацаанд нь өөр бусад зүйл сэрээвэл
InterruptedException дуудагдана.
THREAD ОЙЛГОЛТ
 Өөр thread-ээс одоо ажиллаж буй thread –ийг
үйл ажиллагаагаа зогсоохыг хүсч болно. Энэ
тохиолдолд уг ажиллаж буй thread –ийн
interrupt() функцыг дуудна.
THREAD ОЙЛГОЛТ
 Энэ функц нь уг thread-ийг шууд зогсоохгүй
боловч зогсоохыг хүссэн флагийг true
болгодог.
 Харин ажиллаж буй thread-ийн run() функц
дотор энэ флагийг true болсон эсэхийг
шалгаж байх хэрэгтэй.
THREAD ОЙЛГОЛТ
 sleep() функц нь энэ флагийг шалгаад true
болсон байвал InterruptedException үүсгэдэг.
 Thread-ийг interrupt хийсэн эсэхийг шалгахдаа
isInterrupted() функцыг дуудаж болно. Хэрэв
уг thread-ийг interrupt хийсэн байсан бол энэ
функц нь true утга буцаадаг.
THREAD ОЙЛГОЛТ
 Өөр thread дотроос өөр thread –ийг interrupt
болсон эсэхийг энэ функцыг ашиглаж шалгаж
болно.
 Жишээ нь үндсэн thread дотроос first thread –
ийг шалгахдаа:
THREAD ОЙЛГОЛТ
 Гэхдээ энэ нь first thread-ийг үйл
ажиллагаагаа зогсоосон эсэхийг баталгаатай
хэлж чадахгүй.
– Учир нь first thread interrupt хүсэлтийг авсан ч үйл
ажиллагаагаа үргэлжлүүлсээр байж болно.
 Үйл ажиллагаагаа үнэхээр зүгсоосон эсэхийг
шалгахдаа isAlive() функцыг ашиглан
шалгадаг.
THREAD ОЙЛГОЛТ
 isInterrupted() функц нь уг thread-ийн флагт
өөрчлөлт оруулдаггүй бол interrupted() функц
нь флагыг шалгаад үнэн бол цэвэрлээд (false
болгоод) true утга буцаадгаараа ялгаатай.
 InterruptedException үүссэн бол thread нь
catch хэсгээрээ барьж аваад уг флагаа
цэвэрлэдэг тул үүний дараа дуудагдсан
isInterrupted(), interrupted() функцууд нь false
утга буцаана.
THREAD ОЙЛГОЛТ
 Хэрэв ямар нэг thread –ийг одоо ажиллаж буй
thread –ийг ажиллаж дуустал хүлээлгэх хэрэг
гарвал уг thread –ийн join() функцыг дуудна.
– thread1.join()

More Related Content

More from ganzorigb

Pl lecture6
Pl lecture6Pl lecture6
Pl lecture6
ganzorigb
 
Pl lecture7
Pl lecture7Pl lecture7
Pl lecture7
ganzorigb
 
Pl lecture8
Pl lecture8Pl lecture8
Pl lecture8
ganzorigb
 
Pl lecture8
Pl lecture8Pl lecture8
Pl lecture8
ganzorigb
 
Lecture graphic programming
Lecture graphic programmingLecture graphic programming
Lecture graphic programming
ganzorigb
 
Lecture network programming
Lecture network programmingLecture network programming
Lecture network programming
ganzorigb
 
Lecture file man prog
Lecture file man progLecture file man prog
Lecture file man prog
ganzorigb
 
Lecture file and folder working
Lecture file and folder workingLecture file and folder working
Lecture file and folder working
ganzorigb
 
Lecture data base programming part3
Lecture data base programming part3Lecture data base programming part3
Lecture data base programming part3
ganzorigb
 
Lecture data base programming part2
Lecture data base programming part2Lecture data base programming part2
Lecture data base programming part2
ganzorigb
 
Lecture data base programming part1
Lecture data base programming part1Lecture data base programming part1
Lecture data base programming part1
ganzorigb
 
Lecture hibernate
Lecture hibernateLecture hibernate
Lecture hibernate
ganzorigb
 

More from ganzorigb (20)

Pl lecture6
Pl lecture6Pl lecture6
Pl lecture6
 
Pl lecture7
Pl lecture7Pl lecture7
Pl lecture7
 
Pl lecture8
Pl lecture8Pl lecture8
Pl lecture8
 
Pl lecture8
Pl lecture8Pl lecture8
Pl lecture8
 
Lecture graphic programming
Lecture graphic programmingLecture graphic programming
Lecture graphic programming
 
Lecture network programming
Lecture network programmingLecture network programming
Lecture network programming
 
Lecture file man prog
Lecture file man progLecture file man prog
Lecture file man prog
 
Lecture file and folder working
Lecture file and folder workingLecture file and folder working
Lecture file and folder working
 
Lecture data base programming part3
Lecture data base programming part3Lecture data base programming part3
Lecture data base programming part3
 
Lecture data base programming part2
Lecture data base programming part2Lecture data base programming part2
Lecture data base programming part2
 
Lecture data base programming part1
Lecture data base programming part1Lecture data base programming part1
Lecture data base programming part1
 
Lecture hibernate
Lecture hibernateLecture hibernate
Lecture hibernate
 
Lec04
Lec04Lec04
Lec04
 
Lec03
Lec03Lec03
Lec03
 
PL Lecture4
PL Lecture4PL Lecture4
PL Lecture4
 
PL Lecture3
PL Lecture3PL Lecture3
PL Lecture3
 
PL Lecture2
PL Lecture2PL Lecture2
PL Lecture2
 
PL Lecture1
PL Lecture1PL Lecture1
PL Lecture1
 
Lecture2
Lecture2Lecture2
Lecture2
 
Lecture1
Lecture1Lecture1
Lecture1
 

Lecture tread

  • 2. THREAD Агуулга:  Tread ойлголт  Tread үүсгэх  Tread pool  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 үүсгэдэг.
  • 22. 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()