lecture tread

34
Жава Технологи Улаанбаатар Дээд Сургууль Бэлтгэсэн: Багш Б.Ганзориг

Upload: ganzorigb

Post on 11-Aug-2015

83 views

Category:

Education


4 download

TRANSCRIPT

Page 1: Lecture tread

Жава Технологи

Улаанбаатар Дээд Сургууль

Бэлтгэсэн: Багш Б.Ганзориг

Page 2: Lecture tread

THREAD

Агуулга: Tread ойлголт Tread үүсгэх Tread pool Tread хоорондын нөөцийн хуваарилалт

Page 3: Lecture tread

THREAD ОЙЛГОЛТ

Програмд нэг зэрэг олон үйлдэл гүйцэтгэх боломж олгоно– Жишээ нь сервер програм олон клиентүүдтэй

зэрэг ажиллах– График анимац ажиллаж байхад хэрэглэгч өөр

үйлдлүүдийг хийх боломж олгох– Хоёр болон түүнээс дээш анимац зэрэг ажиллах

боломж олгох

Page 4: Lecture tread

THREAD ОЙЛГОЛТ

Хэрэглэгчийн зохиосон програм нь ядаж нэг thread ашигласан байдаг

– Хэрэглэгч thread –ийг үүсгээгүй үед ч хэрэглэгчийн зохиосон програм хангамж нь өөрөө thread болдог

Page 5: Lecture tread

THREAD ОЙЛГОЛТ

Дараах жишээгээр thread –ийг тайлбарлая

– Файлаас өгөгдлийг хэсэг хэсгээр нь уншиж боловсруулаад өөр файлд бичдэг програм

Page 6: Lecture tread

THREAD ОЙЛГОЛТ

Thread ашигласан эхний жишээ:– Програм эхний хэсгийг уншиж боловсруулаад

файлдаа бичингүүтээ дараачийн хэсгийг авах замаар ажиллана. Энэ тохиолдолд бид уг процессийг дуусгахын тулд нэг thread ашиглаж байна.

Page 7: Lecture tread

THREAD ОЙЛГОЛТ

Thread ашигласан хоёрдугаар жишээ:– Дээрх жишээн дээрх үйлдлийг гурван thread

ашиглан гүйцэтгэе. – Эхний thread файлаас хэсэг хэсгээр уншиж байхад

хоёр дахь thread нь уншсан хэсгийг боловсруулж гурав дахь thread нь боловсруулсан хэсгийг өөр файлд бичих үйлдлийг хийнэ.

Page 8: Lecture tread

THREAD ОЙЛГОЛТ

Хоёр дахь жишээн дээр гурван ширхэг thread ашигласан нь:

– Нэгэнт энэ гурван thread зэрэг ажиллах тул эхний жишээн дээрх програмыг бодвол илүү богино хугацаанд ажиллах чадвартай.

Page 9: Lecture tread

THREAD ОЙЛГОЛТ

Хоёр дахь жишээн дээр нэг асуудал үүснэ:– Хоёр дахь thread нь эхний thread-ийг өгөгдлөө

уншиж дууссаны дараа л боловсруулалт хийх ёстой.

– Тиймээс програм зохиогч thread хооронд мэдээлэл дамжуулах шаардлага гарна.

Page 10: Lecture tread

THREAD ҮҮСГЭХ

Thread классын объект эсвэл уг классаас удамшсан классын объектийг үүсгэх замаар програмд thread –ийг үүсгэнэ.

Thread –ийг үүсгэснийхээ дараа start() функцыг нь дуудаж ажиллуулна.

Page 11: Lecture tread

THREAD ҮҮСГЭХ

Thread-ийн ажиллуулдаг код нь run() функц дотор байдаг бөгөөд энэ функцыг програм зохиогч бичиж өгдөг. Start() функц нь ажиллагаагаа эхлүүлэхдээ run() функцыг дууддаг.

Thread нь өөрөө дотроо дахин thread үүсгэх замаар ажиллаж болно

Page 12: Lecture tread

THREAD ҮҮСГЭХ

Thread үүсгэхэд анхаарах зүйлс: – Thread –ийг үйлдлийн систем үүсгэж ажиллуулдаг– Thread нь хэрэглэгчийн зохиосон програмтай зэрэг

ажиллах чадвартай байдаг. – Thread нь хэрэглэгчийн зохиосон програмаас

тусдаа бие даасан програм юм.

Page 13: Lecture tread

THREAD ҮҮСГЭХ

Thread үүсгэхэд анхаарах зүйлс: – Start() функц нь үйлдлийн системд шинээр thread

үүсгэн ажиллуулахыг зааж өгдөг. – Хэрэв шууд run() функцыг програм дотроосоо

дуудвал (өөрөөр хэлбэл start() функцыг дуудалгүйгээр) програмд гажилт үүсдэг.

Page 14: Lecture tread

THREAD ҮҮСГЭХ

Thread-ийг хоёр хэлбэрээр үүсгэж болдог. – Thread классын объект эсвэл уг классаас

удамшсан классын объектийг үүсгэх замаар

– Runnable интерфэйсийн имплемент хийсэн классын объектийг үүсгэх замаар

Page 15: Lecture tread

THREAD ҮҮСГЭХ

Main thread: Програмын үндсэн функцыг ажиллуулахад програмын үндсэн thread үүсэх бөгөөд үүнийг main thread гэнэ.

Daemon thread: Үндсэн thread-ийг хаахад үндсэн thread-ийн үүсгэсэн thread-үүд нь хамт үхэж байвал эдгээр нь daemon thread юм.

setDaemon(true) гэж thread-ийг daemon болгоно

Page 16: Lecture tread

THREAD ҮҮСГЭХ

Хэрэв үндсэн thread-үүдийг хаахад үхэлгүйгээр үлдэж байвал энэ thread нь хэрэглэгчийн thread юм.

Page 17: Lecture tread

THREAD ЖИШЭЭ

Page 18: Lecture tread

THREAD ЖИШЭЭ

Page 19: Lecture tread

THREAD ЖИШЭЭ

Page 20: Lecture tread

THREAD ЖИШЭЭ

Page 21: Lecture tread

THREAD ХЭРЭГЛЭЭ

Сервер програмын бүтэц– Сервер програм нь ажиллаж эхлэнгүүтээ гаднаас

ирэх хүсэлтүүдийг сонсох зорилготой хэд хэдэн сонсогч daemon thread-үүдийг үүсгэдэг

– Хэрэв гаднаас нэг хүсэлт ирвэл эдгээр thread-үүдийн аль нэг нь уг хүсэлтийг барьж аваад хүсэлтийг боловсруулах үүрэгтэй өөр нэг хэрэглэгчийн thread үүсгэдэг.

Page 22: Lecture tread

THREAD ХЭРЭГЛЭЭ

үргэлжлэл

– Ингэснээр олон зэрэг хүсэлтэй ажиллах боломжтой болно.

– Хүсэлт бүрийг нэг thread биелүүлдэг. – Хүсэлтийг биелүүлж дуусангуутаа уг thread өөрөө

устдаг.

Page 23: Lecture tread

THREAD ХЭРЭГЛЭЭ

үргэлжлэл

– Сервер програмыг хаахад сонсогч thread-ууд хамт хаагдаж байвал daemon thread харин хүсэлтийг боловсруулж байгаа thread үйл ажиллагаагаа үргэлжлүүлэн үлдэж байвал хэрэглэгчийн thread болно.

– Ингэснээр програмын найдвартай байдал нэмэгддэг.

Page 24: Lecture tread

THREAD POOL

Сервер програмын бүтэц– Сервер нь төгсгөлгүй олон thread үүсгэж мэдээж

болохгүй. thread олон үүсэх тусам сервер компьютер дээрх ачаалал нэмэгддэг.

– Энэ асуудлыг шийдвэрлэх зорилгоор сервер програм нь thread pool хэмээх зүйлийг хэрэглэдэг.

Page 25: Lecture tread

THREAD POOL

– Сервер нь thread pool үүсгэн түүн дотор тодорхой тооны thread-үүдийг үүсгэж хийдэг.

– Хэрэв серверт хүсэлт ирвэл түүнийг цөөрөм доторх сул thread-д өгнө.

– Харин бүх thread –үүд ажилтай байвал уг хүсэлтийг биелүүлэх шинэ thread үүсгэхгүй.

– Серверт ирсэн хүсэлт нь цөөрөм дэх аль нэг thread ажлаа дуусган сулрахыг хүлээнэ.

Page 26: Lecture tread

THREAD run() функц

run() функц доторх код нь thread-ийг ажиллуулах код юм. Энэ функц нь Thread классаас удамшин ирдэг.

Thread класс доторх run() функц нь кодгүй байдаг тул програм зохиогч кодыг бичих шаардлагатай.

Page 27: Lecture tread

THREAD run() функц

sleep(millsecond) функц нь заагдсан хугацаагаар thread –ийн үйл ажиллагааг зогсоодог. Энэ нь бусад thread –ийг ажиллах боломжийг олгодог.

sleep() функцыг ашиглах тохиолдолд try catch хэрэглэх ёстой. Учир нь thread –ийг унтаж байх хугацаанд нь өөр бусад зүйл сэрээвэл InterruptedException дуудагдана.

Page 28: Lecture tread

THREAD ОЙЛГОЛТ

Өөр thread-ээс одоо ажиллаж буй thread –ийг үйл ажиллагаагаа зогсоохыг хүсч болно. Энэ тохиолдолд уг ажиллаж буй thread –ийн interrupt() функцыг дуудна.

Page 29: Lecture tread

THREAD ОЙЛГОЛТ

Энэ функц нь уг thread-ийг шууд зогсоохгүй боловч зогсоохыг хүссэн флагийг true болгодог.

Харин ажиллаж буй thread-ийн run() функц дотор энэ флагийг true болсон эсэхийг шалгаж байх хэрэгтэй.

Page 30: Lecture tread

THREAD ОЙЛГОЛТ

sleep() функц нь энэ флагийг шалгаад true болсон байвал InterruptedException үүсгэдэг.

Thread-ийг interrupt хийсэн эсэхийг шалгахдаа isInterrupted() функцыг дуудаж болно. Хэрэв уг thread-ийг interrupt хийсэн байсан бол энэ функц нь true утга буцаадаг.

Page 31: Lecture tread

THREAD ОЙЛГОЛТ

Өөр thread дотроос өөр thread –ийг interrupt болсон эсэхийг энэ функцыг ашиглаж шалгаж болно.

Жишээ нь үндсэн thread дотроос first thread –ийг шалгахдаа:

Page 32: Lecture tread

THREAD ОЙЛГОЛТ

Гэхдээ энэ нь first thread-ийг үйл ажиллагаагаа зогсоосон эсэхийг баталгаатай хэлж чадахгүй.– Учир нь first thread interrupt хүсэлтийг авсан ч үйл

ажиллагаагаа үргэлжлүүлсээр байж болно. Үйл ажиллагаагаа үнэхээр зүгсоосон эсэхийг

шалгахдаа isAlive() функцыг ашиглан шалгадаг.

Page 33: Lecture tread

THREAD ОЙЛГОЛТ

isInterrupted() функц нь уг thread-ийн флагт өөрчлөлт оруулдаггүй бол interrupted() функц нь флагыг шалгаад үнэн бол цэвэрлээд (false болгоод) true утга буцаадгаараа ялгаатай.

InterruptedException үүссэн бол thread нь catch хэсгээрээ барьж аваад уг флагаа цэвэрлэдэг тул үүний дараа дуудагдсан isInterrupted(), interrupted() функцууд нь false утга буцаана.

Page 34: Lecture tread

THREAD ОЙЛГОЛТ

Хэрэв ямар нэг thread –ийг одоо ажиллаж буй thread –ийг ажиллаж дуустал хүлээлгэх хэрэг гарвал уг thread –ийн join() функцыг дуудна. – thread1.join()