lecture tread

Post on 11-Aug-2015

83 Views

Category:

Education

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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()

top related