Əsas fərq – Java-da yatmaq və gözləmək
Yuxu və gözləyin, Java-da çox iş parçacığı üçün istifadə olunan iki üsuldur. Yuxu metodu Thread sinfinə, gözləmə metodu isə Obyekt sinfinə aiddir. Java-da yuxu və gözləmə arasındakı əsas fərq ondan ibarətdir ki, yuxu cari ipin icrasını müəyyən edilmiş millisaniyələr üçün dayandırmaq üçün istifadə olunur, gözləmə metodu isə cari ipin başqa bir mövzunun bildiriş və ya mesajı çağırana qədər gözləməsinə səbəb olmaq üçün istifadə olunur. obyekt üçün notifyAll metodu.
İp əməliyyat sistemində ən kiçik emal vahididir. Bu, proqram daxilində vahid ardıcıl idarəetmə axınıdır. İplər yüngüldür. Multithreading eyni vaxtda birdən çox mövzunun işləmə mexanizmidir. Java kimi proqramlaşdırma dilləri çox iş parçacığını dəstəkləyir. Multithreading üstünlüklərə malikdir, çünki o, eyni vaxtda birdən çox ipi işə salmağa imkan verir və iplər bir-birindən müstəqildir. Java-da multithreading üçün istifadə edilə bilən üsullar var. Onlardan ikisi yatıb gözləyir.
Java-da yuxu nədir?
Əməliyyat sistemində işləyən bir çox proses var. Proses icrada olan bir proqramdır. Hər bir prosesdə bir neçə mövzu ola bilər və bu mövzular arasında kontekst keçidi baş verir. Java-da mövzu yaratmağın iki yolu var. Bu, ip sinfini genişləndirməklə və ya Runnable interfeysini tətbiq etməklə. Thread sinfində ip üzərində əməliyyatlar yaratmaq və yerinə yetirmək üçün konstruktorlar və üsullar var. Thread sinfi Obyekt sinifini genişləndirir və Runnable interfeysini həyata keçirir. Runnable interfeysi nümunələri bir iplə icra edilməsi nəzərdə tutulan hər hansı bir sinif tərəfindən həyata keçirilməlidir. Mövzu icra edildikdə, icra edilməli olan kod run metodu daxilində yazılır. İşləməli olan mövzu mövzu planlaşdırıcısı tərəfindən seçilir. Bir prosesdə yalnız bir başlıq işləyir.
Bir ip bir neçə mərhələdən keçir. Thread sinfinin obyektini yaratdıqdan sonra proqramçı başlanğıc metodunu işə sala bilər. Bu metodu işə salmazdan əvvəl ipin yeni vəziyyətdə olduğu deyilir. Mövzu planlayıcısı işə salınacaq mövzu seçir. Əgər iplik mövzu planlayıcısı tərəfindən hələ seçilməyibsə, lakin başlanğıc metodu işə salınıbsa, o zaman ip işlək vəziyyətdədir. Mövzu planlaşdırıcı icra etmək üçün ipi seçdikdən sonra o, işləyən vəziyyətə keçir. Mövzu canlıdırsa, lakin hazırda işləmək üçün uyğun deyilsə, o, işlək olmayan və ya bloklanmış vəziyyətdədir. İşləmə metodu tamamlandıqdan sonra iplik dayandırılmış vəziyyətə keçir. Bunlar iplik dövrünün əsas mərhələləridir.
Müxtəlif tapşırıqları yerinə yetirmək üçün iplik sinifində müxtəlif üsullar mövcuddur. Yuxu üsulu metodu müəyyən bir müddət ərzində yatmaq üçün istifadə olunur. Yuxu metodunun sintaksisi ictimai boş yuxudur (uzun millisaniyələr) InterruptedException atır. Bu, hal-hazırda icra edilən ipin müəyyən edilmiş millisaniyələr üçün icranı müvəqqəti dayandırmasına səbəb olur. Başqa başlıq cari başlığı kəsirsə, bu istisna atıldıqda cari başlığın kəsilmiş statusu silinir.
Şəkil 01: Yuxu Metodlu Java Proqramı
Yuxarıdakı proqrama əsasən, icra metodu icra edilməli olan kodu ehtiva edir. Əsas proqramda ExampleThread1-in iki obyekti yaradılır və onların üzərində başlanğıc metodları işə salınır. Bu, kodu run metodu daxilində işlətməyə imkan verəcəkdir. Bir anda yalnız bir başlıq yerinə yetirilir. Mövzu ilə.yuxu (1000); birinci mövzuya icranı 1000 millisaniyəlik dayandırmağa imkan verəcək. Mövzu yatarkən, mövzu planlaşdırıcı digər başlığı götürür.
Javada gözləmək nədir?
Birdən çox başlıq paylaşılan mənbəyə daxil ola bilər. Yanlış çıxışın yaranmasına səbəb ola bilər. Mövzu sinxronizasiyası paylaşılan mənbəyə daxil olmaq üçün yalnız bir mövzu yaratmaq üçün istifadə edilə bilər. Aşağıdakı kimi bir vəziyyəti qəbul edin. Əgər t1 və t2 kimi iki başlıq varsa, t1 dəyərləri Text1.txt adlı mətn faylında saxlamağa başlayır. Bu dəyərlər t1 qayıtdıqda bəzi digər hesablamalar üçün istifadə olunacaq. Əgər t2 t1 qayıtmazdan əvvəl başlayırsa, t2 t1 tərəfindən saxlanan dəyərləri dəyişə bilər. Bu, t1-in səhv çıxış təmin etməsinə səbəb ola bilər. Sinxronizasiyanın köməyi ilə t1 Text1.txt faylından istifadə etməyə başlayanda həmin fayl kilidlənə bilər, ona görə də ona yalnız t1 daxil ola bilər. t1 həmin mətn faylına daxil olmaq üçün kilidi buraxana qədər t2 onu dəyişə bilməz. Tapşırıq tamamlandıqda t1 kilidi buraxa bilər. Kilid həm də monitor kimi tanınır.
Mövzu sinxronizasiyası mövzulararası əlaqə ilə əldə edilə bilər. Kritik bölmə paylaşılan resurslara daxil olan kod seqmentidir. Mövzulararası əlaqədə, onun kritik bölməsində işləyən bir ip dayandırılır və icra ediləcək eyni kritik hissəyə başqa bir ipin daxil olmasına icazə verilir. O, gözlə, bildir və notifyAll metodlarından istifadə etməklə həyata keçirilir. Onlar Object sinfinə aiddir. Gözləmə metodu cari ipin kilidi buraxmasına icazə vermək və başqa bir başlıq obyekt üçün notify və ya notifyAll metodunu çağırana qədər gözləmək üçün istifadə olunur. Bildiriş metodu kilidi gözləyən tək bir ipi oyatmaq üçün istifadə olunur. notifyAll kiliddə gözləyən bütün mövzuları oyandırır.
Şəkil 02: Kalkulyator Sinfi
Şəkil 03: Əsas Metod
Kalkulyator sinfi Mövzunu genişləndirir. Sinxronlaşdırılmış blok run metodunun içərisindədir. For loop və bildiriş metodu sinxronlaşdırılmış blokun içərisindədir. Əsas metodun içərisində yaradılmış bir ip nümunəsi və başlanğıc metodu həmin instansiyada çağırılır. Əsas üsul mövzu bildiriş verənə qədər gözləyəcək. Proqramı icra edərkən, əsas metod run metodunun bütün icrasını gözləyir və bildiriş metodunu gözləyir. Bildiriş metodu çağırıldıqdan sonra əsas metod gözləməyi dayandırır və kodun qalan hissəsini icra etməyə başlayır. Əsas Kalkulyator mövzusunun tamamlanmasını gözləyir. Nəhayət, cəmin nəticəsi çap olunur.
Sinxronlaşdırılmış blok yoxdursa və əsas metodun aşağıdakı kodu varsa, o, çıxışı sıfır kimi verəcək, çünki o, digər mövzunun tamamlanmasını gözləmir.
Kalkulyator t1=yeni Kalkulyator ();
t1. başlamaq ();
System.out.println (t1.sum);
Java-da yuxu və gözləmə arasında hansı oxşarlıq var?
Həm yatmaq, həm də gözləmək Java-da çox iş parçacığı həyata keçirərkən istifadə edilə bilən üsullardır
Java-da yuxu və gözləmə arasındakı fərq nədir?
yuxu vs Java-da gözləyin |
|
Yuxu metodu sistem taymerlərinin və planlaşdırıcılarının dəqiqliyinə və dəqiqliyinə uyğun olaraq cari başlığın müəyyən edilmiş millisaniyələr üçün icrasını dayandırmasına səbəb olur. | Gözləmə metodu cari başlığın başqa bir başlıq obyekt üçün notify və ya notifyAll metodunu işə salana qədər gözləməsinə səbəb olur. |
Kilidlə Assosiasiya | |
Yuxu metodu sinxronizasiya zamanı obyektin kilidini açmır. | Gözləmə üsulu sinxronizasiya zamanı kilidi buraxır. |
İcra Metodu | |
Yuxu metodu cari başlıqda icra olunur. | Gözləmə metodu obyektdə çağırılır. |
Əlaqəli Sinif | |
Yuxu Thread sinifinin metodudur. | Gözləmə Obyekt sinifinin metodudur. |
Tamamlama | |
Yuxu prosesi müəyyən edilmiş vaxt bitdikdən sonra tamamlanır. | Gözləmə metodu notify və ya notifyAll metodlarına zəng etməklə kəsilir. |
Xülasə – Java-da yuxu və gözləyin
Əməliyyat sistemində işləyən bir çox proses var. Hər bir prosesdə bir neçə mövzu ola bilər. İp əməliyyat sistemində ən kiçik emal vahididir. Java proqramlaşdırma dili multithreading dəstəkləyir. Bu, eyni vaxtda birdən çox ipi işlətməyə imkan verir. Yuxu və gözləmə çox iş parçacığını həyata keçirərkən istifadə edilə bilən iki üsuldur. Java-da yuxu və gözləmə arasındakı fərq ondan ibarətdir ki, yuxu cari ipin icrasını müəyyən edilmiş millisaniyələr üçün dayandırmaq üçün istifadə olunur, gözləmə metodu isə cari ipin başqa bir mövzunun bildiriş və ya notifyAll-u çağırana qədər gözləməsinə səbəb olmaq üçün istifadə olunur. obyekt üçün metod.