Java-da çox iş parçacığı (Java-da paralellik)


Uyğunluq Java Çox oxlu Sap ThreadingBaxılıb 1304

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Bu dərslik Java-da çoxişliliyin icmalı (Java-da paralellik) və çoxişlilik və çoxişləmə arasındakı fərqləri əhatə edir. Çox iş parçacığının təfərrüatlarına keçməzdən əvvəl ipin nə olduğunu anlayaq.

Mündəricat

Java mövzu

A sap yüngül bir proses və ya prosesin ən kiçik vahididir. Hər prosesdə fərqli tapşırıqları yerinə yetirən birdən çox mövzu ola bilər. Növbəti təlimdə ətraflı başa düşəcəyimiz bir mövzu yaratmağın müxtəlif yolları var. Bir sap iki növdür: a istifadəçi mövzu və ya daemon sapı. Hər dəfə yeni bir tətbiqetmə yaratdığımızda, yeni bir mövzu yaradır, bundan sonra istənilən növ birdən çox mövzu yarada bilərik.

İndi bir mövzu nə olduğunu bildiyimiz üçün çox işləməli Java və paralellik haqqında ətraflı məlumat verək.

Java-da çox işləməPin

Java-da çox iş parçacığı (Java-da paralellik)

Eyni anda birdən çox mövzu işlətdiyimiz zaman buna çox işləmə deyirik. Başqa sözlə, proqramın bir çox hissəsinin eyni vaxtda yerinə yetirilməsinə imkan verən bir Java texnologiyası olduğunu söyləyə bilərik. Bu, maksimum CPU istifadəsi ilə nəticələnir. Eyni zamanda iki və ya daha çox mövzuları icra etdiyi üçün buna paralellik də deyə bilərik. Çox işləmə prosesində iplər paralel uzanır və iplər arasında keçid etmək asandır. Çox işləmə hər bir mövzu üçün ayrıca yaddaş ayırmadığından yaddaşa qənaət edir.

Java paralellik paketindəki siniflərdən istifadə edərək çox işləməli konsepsiyalar tətbiq edə bilərik java.util.concurrent.

Java-da Multithreading üstünlükləri (Payzalılığın üstünlükləri)

  • Hər bir mövzu müstəqildir və bu səbəbdən bir mövzuda bir istisna meydana gəlsə, digər ipi təsir etmir.
  • Eyni anda birdən çox tapşırıq yerinə yetirir və buna görə vaxta qənaət edir
  • Mövzular müstəqil olduğundan istifadəçini bloklamır və eyni zamanda bir çox əməliyyatı həyata keçirə bilər
  • Yaddaşa qənaət edir, çünki birdən çox mövzu ayrı yaddaş ayırmır
  • Maksimum CPU istifadəsi
  • Daha yaxşı reaksiya və daha yaxşı bir istifadəçi təcrübəsi təmin edir

çoklu

çoklu eyni anda birdən çox tapşırığı yerinə yetirmək deməkdir. Bu o deməkdir ki, tək prosessoru bir çox tapşırıqda bölüşür və lazım olduqda tapşırıqlar arasında dəyişir. İki növ çox tapşırıq var:

  • Proses əsaslı çox tapşırıq (Çox işləmə)
  • Mövzuya əsaslanan çox tapşırıq (Çox işləmə)

Proses əsaslı çox tapşırıq

Çox işlənmədə hər prosesin ayrı bir yaddaş ayırması var. Hər bir proses ağırdır və bu səbəbdən proseslər arasında keçid çox vaxt aparır. Beləliklə aralarındakı əlaqə də çox yüksəkdir.

Mövzuya əsaslanan çox tapşırıq

Çox işlənmədə birdən çox mövzu eyni yaddaşı paylaşır. Hər bir iplik yüngül bir prosesdir və bu səbəbdən iplər arasındakı əlaqə azdır.

Aşağıdakı diaqram çox işləmə və çox işləmə anlayışını əks etdirir.

Java-da çox işləməPin

Mövzu yaratmaq

İki fərqli şəkildə bir mövzu yarada bilərik. Hər iki metod da run () metodunu ləğv edir.

  • Runnable interfeysinin tətbiqi
  • Mövzu sinifinin genişləndirilməsi

Çalıştırılabilir interfeys

İşlənə bilən bir mövzu yaratmaq üçün Runnable interfeysini tətbiq edə və ictimaiyyəti ləğv edə bilərik run() metod. Bu metodu əldə etmək üçün bir Thread obyekti yaratmalıyıq start() metod. Normalda bir sinifdə daha çox funksionallıq tətbiq etmək istədikdə Runnable interfeysindən istifadə edirik.

Mövzu sinfi

İşlənə bilən bir mövzu yaratmağın başqa bir yolu Thread sinifini genişləndirmək və ictimaiyyətə tətbiq etməkdir run() metod. Thread obyektindən istifadə edərək start() icra üsulu run() üsulu və ipliyi işə salın. Yalnız Thread funksiyasını həyata keçirmək istədiyimiz zaman Thread sinifindən istifadə edirik.

Mövzu vəziyyətləri / bir ipin həyat dövrü

Bir iplik aşağıda göstərildiyi kimi fərqli vəziyyətlərə malikdir və hər vəziyyətdə fərqli mərhələlərdə keçir:

  • yeni: Yeni bir mövzu yaratdığımızda start () metodunu çağırmazdan əvvəl yeni bir vəziyyətdə olur.
  • Çalışa bilər: Bir mövzu start () metodunu çağırdıqda bu vəziyyəti alır və planlaşdırıcının ipliyi götürməsini gözləyir.
  • Qaçış: Mövzu icra edildikdə, işləyən vəziyyətdədir.
  • Gözləyirəm: Sinxronizasiya prosesinin bir hissəsi olaraq digər mövzuların icrasının tamamlanmasını gözləməsi lazım olduqda mövzu gözləmə vəziyyətindədir.
  • Ölü: İp kəsildikdə, ölü vəziyyətdə olur.

Java Mövzu ÖmrüPin

Java-da çox iş parçacığının sadə nümunəsi (Java-da paralellik)

Aşağıda Thread sinifini genişləndirərək bir mövzu yaratdığımız sadə çox işləmə nümunəsidir. 2 fərqli mövzu yaradırıq və bunları istifadə edərək icra edirik start() metod. İcra edərkən start() üsulu, daxili olaraq avtomatik olaraq çağırır run() metod və onları icra edir. Növbəti təlimdə müxtəlif mövzu metodlarını ətraflı şəkildə görəcəyik.

public class ThreadDemo extends Thread {
  
  public void run() {
    System.out.println("Thread " + Thread.currentThread().getId() + " running");
  }

  public static void main(String[] args) {
    ThreadDemo t = new ThreadDemo();
    ThreadDemo t1 = new ThreadDemo();
    t.start();
    t1.start();
  }

}
Thread 13 running
Thread 12 running

Çox işləmə və çox işləməPin

Java-da Multiprocessing vs Multithreading

Çox oxluÇevrilmə
Paralel olaraq bir müddət içərisində birdən çox mövzu icra edirEyni zamanda iki və ya daha çox prosesi icra edir
Hesablama mövzuları yaradırHesablama gücünü artırır
Mövzunun yaradılması qənaətlidirProsesin yaradılması ləng gedir
Eyni yaddaşı paylaşırHər bir proses üçün fərqli yaddaş ayırır
Emal üçün orta vaxt alırİşin işlənməsi üçün daha az vaxt ayırır
Heç bir təsnifatı yoxdurSimmetrik və ya asimmetrik olaraq təsnif edilə bilər

Mövzu gözləyin, bildirin, bildirinAll ()

Java paralelliyində bir kilid tətbiq edilməsi vacib bir anlayışdır sinxronizasiya. 1 mövzu paylaşılan bir qaynaqdan istifadə etdikdə, icrası tamamlanana qədər digər mövzuların ona daxil olmaması üçün onu kilidləyir. Beləliklə, paylaşılan bir mənbənin kilidləmə vəziyyətini əldə etmək lazımdır. Bu məlumatı əldə edə və ya olan Object sinfinin 3 metodundan istifadə edərək həyata keçirə bilərik wait(), notify()notifyAll(). Wait () metodu ipliyi gözləmə vəziyyətinə gətirir, notify () və notifyAll () metodları icraya davam etmək üçün ipləri gözləmə vəziyyətindən oyadır.

Java mövzu təhlükəsizliyi və sinxronizasiya

Java çox işləmə konsepsiyasını dəstəkləyir və bu səbəbdən onun gətirib çıxara biləcəyi şanslar var məlumat uyğunsuzluğu. Bunun səbəbi, birdən çox mövzunun eyni mənbəni paylaşması və buna görə də mövzu təhlükəsizliyinin çox vacib bir mövzu olmasıdır. Mövzu təhlükəsizliyi və sinxronizasiya ilə məşğul olmaq lazımdır, çünki iplərdən istifadə etməklə həyata keçirilən əməliyyatlar belə deyil atom təbiətdə. Gələcək dərsliklərdə görəcəyimiz Java proqramını mövzu üçün təhlükəsiz etməyin müxtəlif yolları var.

İplik təhlükəsizliyi və dəyişməzliyi

Çox işlənmiş bir mühitdə iplik təhlükəsizliyini təmin etmək üçün paylaşılan mənbələri dəyişməz hala gətirməliyik. Bu şəkildə, dəyişməz hala gətirildikdə birdən çox mövzu paylaşılan mənbələrin dəyərini yeniləməməsini təmin edə bilərik. Lakin birdən çox mövzu paylaşılan mənbələri oxuya bilər.

Java Yaddaş modeli

Java yaddaş modeli, paralel proqramları necə düzgün tərtib edəcəyimizi başa düşmək üçün istifadə etdiyimiz vacib bir anlayışdır. JVM-nin RAM (Random Access Memory) ilə necə işlədiyini təsvir edir. Bu yaddaş modeli iplik sinxronizasiyasına qayğı göstərir və mövzuların paylaşılan dəyişənlərə nə vaxt və necə dəyər yazdığını bilmək imkanı verir. Java yaddaş modeli həm Thread yığını, həm də hər bir ipliyin öz thread yığını saxladığı yığın yaddaşını ehtiva edir.

Java uçucu söz

Çox işləmə zamanı, mövzuların CPU yaddaşının əvəzinə həmişə əsas yaddaşdan paylaşılan dəyişənlərin dəyərlərini oxumasını və ya yazmasını təmin etməliyik. Çünki bir kompüterdə 1-dən çox CPU varsa, hər bir mövzu uyğunsuzluqla nəticələnən CPU önbelleğinde öz paylaşılan dəyişən dəyərini saxlaya bilər. Bu problemin qarşısını almaq üçün paylaşılan dəyişənləri elan edə bilərik Uçucu istifadə volatile açar söz ki, mövzuların həmişə CPU yaddaşından deyil, yalnız əsas yaddaşdan dəyərləri oxumasını / yazmasını təmin edə bilərik.

Əsas mövzuda Java istisnası

Hər hansı bir Java proqramında JVM-in yaratdığı ilk mövzu əsas metoddur. Bəzən ana metod bir ata bilər ələ keçirməyimiz lazım olan istisna buna görə. Əsas mövzudakı müxtəlif istisnaları və bunları necə idarə edəcəyimizi ayrı bir məqalədə başa düşəcəyik.

Daemon mövzuları

Java-da Daemon MövzusuPin

Daemon sapı arxa planda tapşırıqları yerinə yetirən bir mövzu növüdür. Bütün istifadəçi mövzuları tamamlandıqda və proqramı ləğv etdikdə demon mövzularını avtomatik olaraq məhv edir. Daemon mövzularını ayrıca bir məqalədə ətraflı izah edəcəyəm.

Java Mövzusu Yerli

Java Yerli mövzu çox işləmə zamanı mövzu lokal dəyişənlərin yaradılmasına kömək edir. İstifadə edərək mövzu yerli, sinxronizasiya prosesini qarşısını alır. Bu məqalədə Java Thread Local ətraflı məlumat verilir.

Mövzu siqnalı

İplik siqnalları, daha yaxşı ünsiyyət üçün iplərin iplər arasında siqnal göndərməsinə imkan verir. Həm də ipin istifadə edə bilməsi üçün bir müddətin tamamlanmasını gözləməsinin lazım olub olmadığını bildirən siqnallar göndərərək ip rabitəsini inkişaf etdirə bilər.

Java mövzu atma

Biz istifadə edə bilərik Java mövzu mövzu detallarını və məlumatlarını almaq üçün tökün. Bu tətbiqlərlə performans məsələlərini təhlil etmək üçün çox işləməli bir mühitdə kömək edir. Həm də çıxılmaz vəziyyəti müəyyənləşdirməyə və düzəltməyə kömək edir. Bu məqalədə iplik tökülməsini yaratmağın müxtəlif yolları izah olunur.

Java Timer sinfi

Java-da taymerPin

Çox işləmə zamanı, istifadə edərək müəyyən vaxt aralığında iplik icrasını təyin edə bilərik Java Taymeri sinif və TimerTask dərsləri. Bu məqalədə Java Timer sinifinin istifadəsi və taymerin necə ləğv ediləcəyi barədə ətraflı məlumat verilir.

Java Mövzu Hovuzu

A Mövzu hovuzu bir işi emal etməyi gözləyən bir qrup iplikdir. A yarada bilərik iplik hovuzu İcraçılar və ThreadPoolExecution siniflərinə sahib olan Java İcraçı çərçivəsindən istifadə etmək. Bu konsepsiya Java 5-dən təqdim edildi.

Java Callable - Gələcək

Java Callable və Future interfeyslər çox işləməli konsepsiyada ümumi bir anlayışdır. Bunu əsasən mövzuların bəzi dəyərləri qaytarmasını istədiyimiz zaman istifadə edə bilərik. Bu, paralellik paketinin bir hissəsidir və Java 5-dən etibarən mövcuddur. Çağırılan tapşırıqların vəziyyətini tapmaq üçün Gələcək obyektindən istifadə edə bilərik. Çağırılan tapşırıqlar gələcək bir obyekt qaytarır.

Mövzu planlaşdırıcısı

The mövzu planlaşdırıcısı mövzu icrasının ardıcıllığına qərar verən JVM-nin bir hissəsidir. Hansı ipi icra üçün seçəcəyini təxmin edə bilmərik və bəzən iplik prioritetindən də asılıdır. Ümumiyyətlə, iş planlayıcısı mövzuları planlaşdırmaq üçün ya qabaqcıl və ya zaman dilimindən istifadə edir.

Mövzu prioriteti

Hər bir mövzu 1 ilə 10 arasındakı bir tam dəyər olan bir prioritetə ​​sahibdir. Bir çox vəziyyətdə, iş planlayıcısı mövzu prioritetinə əsasən tapşırıqların işlənməsi üçün mövzuları götürür. Üçün təyin edilmiş 3 fərqli sabit var mövzu prioriteti: MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY.

Java Paralel paketindəki komponentlər

Bundan sonra, tərkib hissəsi olan əsas komponentlərin nə olduğunu görəcəyik Java paralel paketi java.util.concurrent

İcraçı

İcraçı interfeysi müəyyən bir tapşırığı yerinə yetirir. Tətbiqata əsasən, tapşırığın yeni mövzuda və ya cari mövzuda icra olunmasına qərar verir.

İcraçı xidmət

İcraçı xidmət asenkron emal üçün istifadə olunur. Mövzunun mövcudluğuna əsasən təqdim olunmuş işi planlaşdırır. Tapşırığı planlaşdırmaq üçün Runnable interfeysindən istifadə edirik.

İcraçı Xidmət cədvəli

Planlaşdırılmış İcraçı Xidmət tapşırıqları təxirə salmadan vaxtaşırı planlaşdırır. Bu, tapşırıqları dərhal yerinə yetirir. Tapşırığı təyin etmək üçün Runnable və Callable interfeyslərindən istifadə edə bilərik.

Gələcək

Gələcək asenkron tapşırıqların nəticəsini verir. Hesablanmış nəticəni əldə etmək, tapşırığın tamamlanıb-tamamlanmadığını yoxlamaq üçün bu interfeysdən istifadə edə bilərik.

CountdownLatch

CountdownLatch JDK 5 paketinin bir hissəsi olan və bəzi digər əməliyyatlar tamamlanana qədər mövzuları gözləməyə məcbur edən bir köməkçi sinifdir. Ümumiyyətlə, hər bir asılı mövzu icrası başa çatdıqda və avtomatik olaraq azalan bir tamsayı dəyəri olan bir sayğac var. Sayğac dəyəri 0 olduqda, bütün mövzuları sərbəst buraxır.

Cyclic Barrier

Cyclic Barrier CountDownLatch-a bənzəyir, yalnız birdən çox mövzuya gözləmə imkanı verir və təkrar istifadəni dəstəkləyir. Tapşırığı Runnable interfeysindən istifadə edərək təyin edə bilərik.

Semafore

Semafore kritik bölmələrə mövzu girişini bloklamaq üçün istifadə olunur. İp kritik hissəyə girməzdən əvvəl semaforun icazəsi olub-olmadığını yoxlayır. İcazə varsa, ipin girməsinə icazə verir, əks halda girməyəcək. O, mövcud icazələrin sayını yoxlamaq üçün bir üsul ehtiva edir. Semaforlar iplik siqnalı üçün də istifadə edilə bilər.

  • Semaforun sayılması: Bu semafor, istifadə edərək göndərilən siqnalların sayını hesablaya bilər take() metodu.
  • Sınaqlı semafor: Saxlaya biləcəyi siqnal sayının yuxarı sərhədinə sahib olan semafordur

ThreadFactory

ThreadFactory, tələbə əsasən yeni bir mövzu yaratmağa kömək edən bir mövzu hovuzudur.

Bloklama Sırası

Bloklama Sırası Java Multithreading mühitində ciddi bir problem olan bir istehsalçı-istehlakçı problemi olduğu asenkron ssenarilərdə faydalıdır.

Gecikmə növbəsi

Gecikmə növbəsi sonsuz ölçülü bir Bloklama Sırasıdır. Bu, elementdəki səsvermədə bir gecikmə meydana gətirir, yəni baş element olan növbədəki ən üst element yalnız sonuncuda silinəcəkdir.

Kilidlər

Kilid yalnız hazırda icra olunan mövzuda paylaşılan mənbəyə girişin olmasını təmin edir və cari mövzu mənbəyi buraxana qədər digər mövzuların ona daxil olmasını maneə törədir. Bu, əsasən sinxronizasiya üçün istifadə olunur və onun metodlarını kilidləmə () və açma () kimi ayrı metodlarda istifadə edə bilərik.

Phaser

Phaser eyni zamanda icra üçün birdən çox sapı bloklayan çevik bir maneədir. Ayrı-ayrı mərhələlərdə bir sıra mövzuları dinamik şəkildə icra edir.

Multithreading və ya Paralellikdə Problemlər

Çox işləmə və ya paralellik, birdən çox mövzuların eyni vaxtda icrası səbəbindən bir neçə ciddi problemlə nəticələnə bilər. Aşağıda çox işləmə səbəbindən ortaya çıxan bir neçə məsələ var.

Çox işləməli bir mühitdə Java Deadlock vəziyyəti

Çıxılmaz vəziyyət Java-da çox işləməli bir mühitdə ortaya çıxan ciddi bir vəziyyətdir. Bu, 2 mövzu sonsuz bir şəkildə icrasının tamamlanmasını gözlədikdə meydana gəlir. Bu vəziyyətdə, hər iki ip də sonsuza qədər kilidlənir, çünki bir-birini gözlədiyindən heç vaxt icra olunmur. Bu məqalədə çıxılmaz vəziyyət barədə ətraflı məlumat verilir.

İstehsalçı-İstehlakçı problemi

The istehsalçı-istehlakçı problemi Java-da çox işləməli mühitdə görülən ümumi bir məsələdir. Bu məsələni. İstifadə edərək həll edə bilərik wait()notify() Java 5-ə qədər metodlar. Java 5-dən sonra bu problemi Bloklama Sırası. İstehsalçı-istehlakçı problemi həlli, hər hansı bir elementə çatmadan əvvəl növbənin boş olmamasını gözləyir və hər hansı bir element əlavə etmədən əvvəl kifayət qədər yerin olmasını təmin edir.

Yarış vəziyyəti və kritik hissə

A kritik bölmə birdən çox iş parçasının icra etdiyi kod bölməsidir. A irqi vəziyyəti birdən çox mövzu eyni dəyişənləri oxuduqda / yazdıqda kritik bir hissədə meydana gəlir. Eyni zamanda, iplərin bir yarışda olduğu və iplik icrasının ardıcıllığında bir fərq olduqda, nəticənin kritik hissənin eyni vaxtda icrasına təsir göstərə biləcəyi deməkdir. Yarış şəraitində yarana biləcək 2 nümunə var:

  • Oxuyun-dəyişdirin-yazın
  • Yoxlayın, sonra hərəkət edin

Aclıq və Ədalət

Aclıq Java paralelliyində meydana gələn başqa bir problemdir, yəni digər mövzuların onu tutduğundan, mövzuya CPU vaxtına icazə verilmir. Bu səbəbdən ipliyin ac qaldığı deyilir. Bu problemin həlli budur ədalət bu, bütün mövzuların icrası üçün kifayət qədər şans verildiyi deməkdir.

Yerləşmiş monitor kilidi

Yerləşmiş monitor kilidlənməsi, iplərin əbədi gözlədiyi bir çıxılmaz vəziyyətə bənzəyir. Yeganə fərq budur ki, iplər yuvalanmış monitor kilidində eyni qaydada kilidlənir, çıxılmaz vəziyyətdə iplər fərqli qaydada kilidlənir.

Sürüşmə şərtləri

Sürüşmə vəziyyəti, ipin bir vəziyyəti yoxladığı və ona əməl etmədən əvvəl başqa bir ipliyin vəziyyəti dəyişdirdiyi və ilk ip üçün səhv olması ilə nəticələnir. Bu, Java-da çox işləmə nəticəsində yaranan başqa bir məsələdir.

Java Concurrency paralellik məsələlərini həll etmək üçün qurur

Aşağıda yuxarıda gördüyümüz Java-da paralellik problemlərinin həllinə kömək edən bir neçə quruluş verilmişdir:

Çıxmazdan qorunma

Bir çox mövzu eyni kilidi fərqli bir sırada əldə etməyə çalışdıqda çıxılmaz vəziyyətin meydana gəldiyini gördük. Bununla birlikdə, aşağıdakı metodlara riayət etməklə çıxılmaz vəziyyətin qarşısını ala bilərik:

  • Kilid sifariş
  • Kilid vaxtı
  • Kiliddən çıxma aşkarlanması

Kilidlər

Kilid, müəyyən bir paylaşılan mənbəni icraçı mövzu tərəfindən istifadə edildiyi zaman digər mövzuları daha çox əldə etməsini kilidləyən Java çox işləməli bir sinxronizasiya mexanizmidir. İstifadə edən bir neçə kilid tətbiqetmə var lock() daha çox girişin qarşısını almaq üçün metod və unlock() kilidi buraxma üsulu.

Kilidi oxuyun / yazın

Eyni mənbəni oxuyan və yazan bir çox mövzu olduqda oxumaq / yazma kilidi tələb olunur. Bir mövzu mənbəyi oxuyarkən, digəri eyni mənbəni yazdıqda, qeyri-müəyyənliklə nəticələnə bilər. Bu səbəbdən bu məsələni həll etmək üçün mövcud mövzu yazdıqda başqa bir oxuma və yazma girişinə imkan verməyən bir oxu / yazma kilidini tətbiq edə bilərik.

Yenidən kilidlər

Yenidən qayıtmaq, bir ipin onsuz da mövcud kilid üçün bir kilidi yenidən ala biləcəyi deməkdir. Yenidən müraciət etmək üçün bir nümunə Java-nın sinxronlaşdırılmış bloklarıdır. Bu, düzgün həll edilmədiyi təqdirdə çıxılmaz vəziyyətə bənzər bir kilidləmə ilə nəticələnə bilər.

Mövzu SinxronizasiyaPin

Java-da mövzu sinxronizasiyası

Mövzu sinxronizasiyası Java çox işləmə mühitində vacib bir anlayışdır. Sinxronizasiya bir anda yalnız bir mövzu paylaşılan mənbəyə daxil ola biləcəyini təmin edir. Aşağıda müxtəlif sinxronizasiya tətbiqləri var. İp müdaxiləsi və tutarlılıq probleminin qarşısını alır.

Sinxronizasiya olunmuş metod

Sinxronizasiya olunmuş metod, ilə elan olunan bir üsuldur synchronized açar söz. Mövzu sinxronizasiya olunmuş bir metod çağırdıqda, paylaşılan mənbəni kilidləyir və yalnız iş bitdikdə buraxır.

Sinxronlaşdırılmış blok

Sinxronizasiya olunmuş blok, ilə müəyyən edilmiş bir blokdur synchronized açar söz. Sinxronlaşdırılmış blokun əhatə dairəsi metoddan daha kiçikdir. Sinxronizasiya edilmiş blok daxilində hər hansı bir paylaşılan mənbəyi sinxronizasiya edə bilərik.

Statik sinxronizasiya

Sinxronizasiya edilmiş açar sözlə elan etdiyimiz statik metod statik sinxronizasiyadir. Bu vəziyyətdə, müəyyən bir obyekt əvəzinə sinfi kilidləyəcəkdir.

Mövzulararası rabitə

Sinxronizasiyanı təmin etmək üçün mövzu arasındakı əlaqə mövzuarası rabitə. Bu mexanizm, kritik bir hissədəki bir ipin icrası zamanı dayandırıldığı və başqa bir ipin kritik hissəyə daxil olmasına imkan verdiyi zaman meydana gəlir. Bunun üçün ya notify (), notifyAll () və wait () metodlarından istifadə edə bilərik.

Mövzu kəsir

InterruptException-u yuxu və gözləmə vəziyyətindən çıxdığı üçün atan interrupt () metodundan istifadə edərək yuxu və ya gözləmə vəziyyətindən bir ipi kəsə bilərik. Mövzu yatmadığı və ya gözləmədiyi zaman interrupt () metodunu çağırırıqsa, istisnasız olaraq normal şəkildə işləyəcək və müdaxilə bayrağını doğrudur.

Monitoru yenidən daxil edin

Sinxronizasiya üçün eyni monitorun yenidən istifadə edilməsinə yenidən daxil olan monitor deyilir. Bu, Java paralelliyində tək bir mövzu kilidlənməsinin qarşısını ala bilər.

nəticə

Bu dərslikdə biz Java-da çoxşaxəliliyin və ya Java-da paralelliyin, çoxtaplılığın nə olduğunu gördük, həmçinin Mövzunun yaradılması, mövzu hovuzu, mövzunun prioriteti, mövzunun boşaldılması, mövzu planlaşdırıcısı, çıxılmaz vəziyyətlər kimi mövzu ilə əlaqəli anlayışların icmalına baxdıq. Gələcək dərslərdə bu mövzuları ətraflı şəkildə görəcəyik.

Sizə müraciət edə bilərsiniz Müsahibə suallarını çox işləməli üst və vacib sualları əhatə edən reportajlara hazırlaşmaq.

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »
5