Жава хэл дээр унтах, хүлээх хоёрын ялгаа

Агуулгын хүснэгт:

Жава хэл дээр унтах, хүлээх хоёрын ялгаа
Жава хэл дээр унтах, хүлээх хоёрын ялгаа

Видео: Жава хэл дээр унтах, хүлээх хоёрын ялгаа

Видео: Жава хэл дээр унтах, хүлээх хоёрын ялгаа
Видео: VPS | [Хиймэл оюуны шинжлэх ухаан] 2024, Долдугаар сарын
Anonim

Үндсэн ялгаа: унтах ба Java дээр хүлээх

Унтах ба хүлээх нь Java хэл дээр олон урсгалт хийхэд хэрэглэгддэг хоёр арга юм. Унтах арга нь Thread ангилалд хамаарах бол хүлээх арга нь Object ангиас хамаарна. Java-д унтах ба хүлээх хоёрын гол ялгаа нь унтах горим нь одоогийн хэлхээний гүйцэтгэлийг заасан миллисекундэд түр зогсооход ашиглагддаг бол хүлээх аргыг ашиглан өөр хэлхээ нь мэдэгдэл дуудах хүртэл хүлээх болно. объектын notifyAll арга.

Thread нь үйлдлийн систем дэх боловсруулах хамгийн жижиг нэгж юм. Энэ нь програм доторх хяналтын нэг дараалсан урсгал юм. Утаснууд нь хөнгөн жинтэй. Multithreading нь олон урсгалыг нэгэн зэрэг ажиллуулах механизм юм. Java зэрэг програмчлалын хэл нь олон урсгалыг дэмждэг. Multithreading нь олон урсгалыг нэгэн зэрэг ажиллуулах боломжийг олгодог бөгөөд утаснууд нь бие биенээсээ хамааралгүй байдаг тул давуу талтай. Жава хэл дээр олон урсгалд ашиглаж болох аргууд байдаг. Тэдний хоёр нь унтаж, хүлээж байна.

Жава хэл дээр унтах гэж юу вэ?

Үйлдлийн системд олон процесс ажиллаж байна. Процесс нь хэрэгжиж буй програм юм. Процесс бүр олон урсгалтай байж болох ба эдгээр урсгалуудын хооронд контекст солигдох болно. Java хэл дээр thread үүсгэх хоёр арга бий. Энэ нь thread классыг өргөтгөх эсвэл Runnable интерфэйсийг хэрэгжүүлэх замаар юм. Thread класс нь thread дээр үйлдлүүдийг үүсгэж гүйцэтгэх бүтээгчид болон аргуудтай. Thread анги нь Object классыг өргөтгөж, Runnable интерфейсийг хэрэгжүүлдэг. Runnable интерфэйсийг thread-ээр гүйцэтгэхэд зориулагдсан аливаа анги хэрэгжүүлэх ёстой. Thread нь ажиллах үед гүйцэтгэх ёстой код нь run method дотор бичигдэнэ. Ажиллуулах ёстой thread-ыг урсгал төлөвлөгч сонгоно. Нэг процесст зөвхөн нэг хэлхээ ажилладаг.

Утас нь хэд хэдэн үе шат дамждаг. Thread ангийн объект үүсгэсний дараа программист эхлэх аргыг дуудаж болно. Энэ аргыг дуудахын өмнө утас шинэ төлөвт байна гэж хэлнэ. Удаан төлөвлөгч нь ажиллуулах урсгалыг сонгоно. Хэрэв thread төлөвлөгчөөр хараахан сонгоогүй байгаа ч эхлүүлэх аргыг дуудсан бол хэлхээ нь ажиллах боломжтой төлөвт байна. Thread scheduler нь гүйцэтгэх урсгалыг сонгосны дараа энэ нь ажиллаж байгаа төлөв рүү шилжинэ. Хэрэв хэлхээ амьд боловч одоогоор ажиллуулах эрхгүй бол энэ нь ажиллах боломжгүй эсвэл блоклогдсон төлөвт байна. Ажиллуулах аргыг дуусгасны дараа утас нь дуусгавар болсон төлөвт шилждэг. Эдгээр нь хэлхээний амьдралын мөчлөгийн үндсэн үе шатууд юм.

Thread ангилалд янз бүрийн даалгавар гүйцэтгэх янз бүрийн аргууд байдаг. Унтах аргыг тодорхой хугацаанд унтахын тулд хэрэглэдэг. Унтах аргын синтакс нь нийтийн хүчингүй унтах (урт миллисекунд) InterruptedException шидэлт юм. Энэ нь одоо ажиллаж байгаа хэлхээг тодорхой хэдэн миллисекундээр түр зогсооход хүргэдэг. Хэрэв өөр хэлхээ одоогийн хэлхээг тасалбал энэ үл хамаарах зүйл тохиолдох үед одоогийн хэлхээний тасалдсан төлөв арилна.

Жава хэл дээр унтах, хүлээх хоёрын ялгаа
Жава хэл дээр унтах, хүлээх хоёрын ялгаа

Зураг 01: Унтах аргатай Java програм

Дээрх программын дагуу ажиллуулах арга нь гүйцэтгэх ёстой кодыг агуулдаг. Үндсэн программ дээр ExampleThread1-ийн хоёр объектыг үүсгэсэн бөгөөд тэдгээр дээр эхлүүлэх аргуудыг дууддаг. Энэ нь кодыг ажиллуулах аргын дотор ажиллуулах боломжийг олгоно. Нэг удаад зөвхөн нэг хэлхээ ажиллана. Thread-тай.унтах (1000); Эхний хэлхээ нь гүйцэтгэлийг 1000 миллисекунд дуусгах боломжийг олгоно. Утас унтаж байх үед хэлхээс төлөвлөгч нөгөө хэлхээг авдаг.

Жава хэл дээр юу хүлээх вэ?

Олон хэлхээ холбоо хуваалцсан эх сурвалжид хандаж болзошгүй. Энэ нь буруу гаралт үүсгэхэд хүргэдэг. Thread synchronization нь хуваалцсан эх сурвалжид хандахын тулд зөвхөн нэг хэлхээ үүсгэх боломжтой. Нөхцөл байдлыг дараах байдлаар төсөөл. Хэрэв t1 ба t2 гэсэн хоёр урсгал байвал t1 нь Text1.txt нэртэй текст файлд утгыг хадгалж эхэлнэ. Эдгээр утгууд нь t1 буцаж ирэхэд бусад тооцоололд ашиглагдана. Хэрэв t2 нь t1 буцаж ирэхээс өмнө эхлэх юм бол t2 нь t1-ийн хадгалсан утгуудыг өөрчилж болно. Энэ нь t1-ийг буруу гаралт өгөхөд хүргэж болзошгүй. Синхрончлолын тусламжтайгаар t1 нь Text1.txt файлыг ашиглаж эхлэхэд тэр файлыг түгжих боломжтой тул зөвхөн t1-ээр хандах боломжтой. t1 нь тухайн текст файлд хандахын тулд түгжээг гаргах хүртэл t2 үүнийг өөрчлөх боломжгүй. Ажил дууссаны дараа t1 түгжээг суллаж болно. Түгжээг монитор гэж бас нэрлэдэг.

Thread синхрончлолыг утас хоорондын холбоогоор хийж болно. Чухал хэсэг нь хуваалцсан нөөцөд ханддаг кодын сегмент юм. Thread хоорондын харилцаанд урсгалыг өөрийн чухал хэсэгт түр зогсоож, өөр нэг хэлхээг гүйцэтгэхийн тулд ижил чухал хэсэгт оруулахыг зөвшөөрдөг. Энэ нь wait, notify, notifyAll аргуудыг ашиглан хэрэгждэг. Тэд Object ангилалд багтдаг. Хүлээлгэх аргыг одоогийн хэлхээг түгжээг суллахыг зөвшөөрөхөд ашигладаг бөгөөд өөр урсгал нь тухайн объектын notify эсвэл notifyAll аргыг дуудах хүртэл хүлээнэ. Мэдэгдлийн аргыг түгжээг хүлээж байгаа нэг хэлхээг сэрээхэд ашигладаг. notifyAll нь түгжээнд хүлээгдэж буй бүх хэлхээг сэрээдэг.

Java-д унтах, хүлээх хоёрын ялгаа_Зураг 02
Java-д унтах, хүлээх хоёрын ялгаа_Зураг 02

Зураг 02: Тооны машины ангилал

Жава хэл дээр унтах, хүлээх хоёрын гол ялгаа
Жава хэл дээр унтах, хүлээх хоёрын гол ялгаа

Зураг 03: Үндсэн арга

Тооцооны машин анги нь Thread-ийг өргөтгөдөг. Синхрончлогдсон блок нь ажиллуулах аргын дотор байна. For давталт ба мэдэгдлийн арга нь синхрончлогдсон блок дотор байна. Үндсэн аргын дотор үүсгэсэн thread-ийн жишээ болон эхлэх аргыг тухайн жишээн дээр дууддаг. Үндсэн арга нь утас мэдэгдэл өгөх хүртэл хүлээх болно. Програмыг ажиллуулахдаа үндсэн арга нь ажиллуулах аргын бүрэн гүйцэтгэлийг хүлээж, мэдэгдэх аргыг хүлээнэ. Мэдэгдлийн аргыг дуудсаны дараа үндсэн арга нь хүлээхээ больж, үлдсэн кодыг ажиллуулж эхэлнэ. Үндсэн хэсэг нь Тооны машин дуусах хүртэл хүлээж байна. Эцэст нь нийлбэрийн үр дүнг хэвлэв.

Хэрэв синхрончлогдсон блок байхгүй бөгөөд үндсэн арга нь доорх кодтой бол энэ нь нөгөө хэлхээг дуусгахыг хүлээгээгүй тул гаралтыг тэг болгон өгнө.

Тооцооны машин t1=шинэ Тооны машин ();

t1. эхлэх ();

System.out.println (t1.sum);

Жава хэл дээр унтах, хүлээх хоёрын ижил төстэй зүйл юу вэ?

Унтах, хүлээх хоёр нь Java-д multithreading-г хэрэгжүүлэхэд ашиглаж болох аргууд юм

Жава хэл дээр унтах, хүлээх хоёрын ялгаа юу вэ?

унтах ба Java дээр хүлээх

Унтах арга нь системийн цаг хэмжигч болон хуваарьлагчийн нарийвчлал, нарийвчлалыг харгалзан одоогийн хэлхээг заасан хэдэн миллисекундэд гүйцэтгэлийг түр зогсооход хүргэдэг. Хүлээлтийн арга нь тухайн объектын notify эсвэл notifyAll аргыг өөр хэлхээг дуудах хүртэл одоогийн хэлхээг хүлээхэд хүргэдэг.
Түгжээтэй холбоо
Унтах арга нь синхрончлолын үед объектын түгжээг гаргахгүй. Хүлээлтийн арга нь синхрончлолын үед түгжээг суллана.
Гүйцэтгэх арга
Унтах аргыг одоогийн хэлхээнд ажиллуулсан. Хүлээлтийн аргыг объект дээр дуудсан.
Холбоотой анги
Унтах нь Thread ангийн арга юм. Хүлээлт нь Object ангийн арга юм.
Дуусгах
Унтах үйл явц заасан хугацаа дууссаны дараа дуусна. Хүлээлтийн аргыг notify эсвэл notifyAll аргууд руу залгаснаар тасалдана.

Дүгнэлт – Java хэл дээр унтах ба хүлээх

Үйлдлийн систем дээр олон процесс ажиллаж байна. Процесс бүр олон урсгалтай байж болно. Thread нь үйлдлийн систем дэх боловсруулалтын хамгийн жижиг нэгж юм. Java програмчлалын хэл нь олон урсгалыг дэмждэг. Энэ нь олон урсгалыг нэгэн зэрэг ажиллуулах боломжийг олгодог. Унтах ба хүлээх нь олон урсгалтыг хэрэгжүүлэхэд ашиглаж болох хоёр арга юм. Java-д унтах ба хүлээх хоёрын ялгаа нь унтах горимыг одоогийн хэлхээний гүйцэтгэлийг заасан миллисекундэд түр зогсооход ашигладаг бол хүлээх аргыг өөр хэлхээг notify эсвэл notifyAll-ийг дуудах хүртэл одоогийн урсгалыг хүлээхэд хүргэдэг. объектын арга.

Зөвлөмж болгож буй: