Anahtar Farkı – Java'da uyku vs bekleme
Uyku ve bekle Java'da çoklu kullanım için kullanılan iki yöntemdir. Bekleme yöntemi Object sınıfından iken uyku yöntemi Thread sınıfına aittir. Java'da uyku ve bekleme arasındaki temel fark, uykunun belirtilen milisaniye sayısı boyunca geçerli iş parçacığının yürütülmesini askıya almak için kullanılması, wait yöntemi ise geçerli iş parçacığının başka bir iş parçacığı bildirimi çağırana kadar beklemesine neden olmak için kullanılır veya nesne için notifyAll yöntemi.
Bir iş parçacığı, işletim sistemindeki en küçük işlem birimidir. Bir program içindeki tek sıralı kontrol akışıdır. İplikler hafiftir. Çoklu iş parçacığı, aynı anda birden çok iş parçacığı çalıştırma mekanizmasıdır. Java gibi programlama dilleri multithreading'i destekler. Çoklu iş parçacığının avantajları vardır, çünkü aynı anda birden çok iş parçacığının çalışmasına izin verir ve iş parçacıkları birbirinden bağımsızdır. Java'da çoklu kullanım için kullanılabilecek yöntemler vardır. İkisi uyu ve bekle.
Java'da uyku nedir?
Bir işletim sisteminde çalışan birden çok işlem vardır. İşlem, yürütülmekte olan bir programdır. Her işlemin birden fazla iş parçacığı olabilir ve bu iş parçacıkları arasında meydana gelen bir bağlam geçişi vardır. Java'da bir iş parçacığı oluşturmanın iki yolu vardır. Bu, iş parçacığı sınıfını genişleterek veya Runnable arabirimini uygulayarak. Thread sınıfı, bir iş parçacığı üzerinde işlemler oluşturmak ve gerçekleştirmek için yapıcılara ve yöntemlere sahiptir. Thread sınıfı, Object sınıfını genişletir ve Runnable arabirimini uygular. Runnable arabirimi, örnekleri bir iş parçacığı tarafından yürütülmesi amaçlanan herhangi bir sınıf tarafından uygulanmalıdır. İş parçacığı yürütüldüğünde, yürütmesi gereken kod run yönteminin içine yazılır. Çalıştırması gereken iş parçacığı, iş parçacığı zamanlayıcı tarafından seçilir. Tek bir işlemde yalnızca bir iş parçacığı çalışır.
Bir iş parçacığı birkaç aşamadan geçer. Thread sınıfının bir nesnesini oluşturduktan sonra programcı start yöntemini çağırabilir. Bu yöntemi çağırmadan önce iş parçacığının yeni durumda olduğu söylenir. İş parçacığı zamanlayıcı çalıştırılacak bir iş parçacığı seçer. İş parçacığı, iş parçacığı zamanlayıcısı tarafından henüz seçilmediyse ancak başlatma yöntemi çağrıldıysa, iş parçacığı çalıştırılabilir durumda demektir. İş parçacığı zamanlayıcı yürütülecek iş parçacığını seçtikten sonra, çalışma durumuna geçer. İş parçacığı canlıysa ancak şu anda çalışmaya uygun değilse, çalıştırılamaz veya engellenmiş durumda demektir. run yönteminin tamamlanmasından sonra iş parçacığı sonlandırıldı durumuna gider. Bunlar iş parçacığı yaşam döngüsünün ana aşamalarıdır.
Farklı görevleri gerçekleştirmek için thread sınıfında kullanılabilecek çeşitli yöntemler vardır. Uyku yöntemi, yöntemi belirli bir süre uyutmak için kullanılır. Uyku yönteminin sözdizimi, genel geçersiz uykudur (uzun milisaniye), InterruptedException'ı atar. Şu anda yürütülmekte olan iş parçacığının, belirli bir milisaniye sayısı boyunca yürütmeyi geçici olarak durdurmasına neden olur. Başka bir iş parçacığı geçerli iş parçacığını keserse, bu istisna atıldığında mevcut iş parçacığının kesintiye uğramış durumu temizlenir.
Şekil 01: Uyku Yöntemli Java Programı
Yukarıdaki programa göre run metodu çalıştırılması gereken kodu içerir. Ana programda, ExampleThread1'in iki nesnesi oluşturulur ve bunlar üzerinde start yöntemleri çağrılır. Bu, kodun run yöntemi içinde çalıştırılmasına izin verecektir. Bir seferde yalnızca bir iş parçacığı yürütülür. İplik ile.uyku (1000); ilk iş parçacığının yürütmeyi 1000 milisaniye boyunca sonlandırmasına izin verir. Bir iş parçacığı uyurken, iş parçacığı zamanlayıcı diğer iş parçacığını alır.
Java'da beklemek nedir?
Birden çok ileti dizisi, paylaşılan bir kaynağa erişebilir. Yanlış çıktı üretilmesine neden olabilir. İş parçacığı senkronizasyonu, paylaşılan kaynağa erişmek için yalnızca bir iş parçacığı yapmak için kullanılabilir. Aşağıdaki gibi bir durum varsayalım. Eğer t1 ve t2 olarak iki thread varsa, t1 Text1.txt isimli bir text dosyasına değerleri kaydetmeye başlar. Bu değerler, t1 döndüğünde başka bir hesaplama için kullanılacaktır. t2, t1 dönmeden önce başlarsa, t2, t1 tarafından kaydedilen değerleri değiştirebilir. Bu, t1'in yanlış bir çıktı sağlamasına neden olabilir. Senkronizasyon yardımıyla, t1 Text1.txt dosyasını kullanmaya başladığında, o dosya kilitlenebilir, böylece sadece t1 tarafından erişilebilir. t2, t1 bu metin dosyasına erişmek için kilidi serbest bırakana kadar değiştiremez. Görev tamamlandığında t1 kilidi serbest bırakabilir. Kilit, monitör olarak da bilinir.
İş parçacığı senkronizasyonu, iş parçacıkları arası iletişim ile sağlanabilir. Kritik bölüm, paylaşılan kaynaklara erişen bir kod bölümüdür. İş parçacığı arası iletişimde, kritik bölümünde çalışan bir iş parçacığı duraklatılır ve yürütülmek üzere aynı kritik bölüme başka bir iş parçacığının girmesine izin verilir. Wait, notify ve notifyAll yöntemleri kullanılarak uygulanır. Object sınıfına aittirler. Wait yöntemi, geçerli iş parçacığının kilidi serbest bırakmasına ve başka bir iş parçacığının nesne için notify veya notifyAll yöntemini çağırmasına kadar beklemesine izin vermek için kullanılır. Bildirim yöntemi, kilidi bekleyen tek bir iş parçacığını uyandırmak için kullanılır. notifyAll, kilitte bekleyen tüm dizileri uyandırır.
Şekil 02: Hesap Makinesi Sınıfı
Şekil 03: Ana Yöntem
Calculator sınıfı, Thread'i genişletir. Senkronize blok, run yönteminin içindedir. For döngüsü ve bildirim yöntemi, senkronize edilmiş bloğun içindedir. Ana yöntemin içinde, oluşturulan bir iş parçacığının bir örneği ve bu örnekte başlatma yöntemi çağrılır. Ana yöntem, iş parçacığı bir bildirim verene kadar bekleyecektir. Programı çalıştırırken, ana yöntem, çalıştırma yönteminin tüm yürütülmesine kadar bekler ve bildirim yöntemini bekler. Notify yöntemi çağrıldığında, ana yöntem beklemeyi bırakır ve kodun geri kalanını yürütmeye başlar. Main, Hesap Makinesi dizisi tamamlanana kadar bekliyor. Son olarak, toplamın sonucu yazdırılır.
Senkronize blok yoksa ve main method aşağıdaki gibi bir koda sahipse diğer threadin tamamlanmasını beklemediği için çıktıyı sıfır olarak verecektir.
Hesap Makinesi t1=yeni Hesap Makinesi ();
t1. start();
System.out.println (t1.sum);
Java'da uyku ve bekleme arasındaki benzerlik nedir?
Hem uyku hem de bekleme, Java'da çoklu iş parçacığını uygularken kullanılabilecek yöntemlerdir
Java'da uyku ve bekleme arasındaki fark nedir?
uyku vs Java'da bekleme |
|
Uyku yöntemi, sistem zamanlayıcılarının ve zamanlayıcılarının kesinliğine ve doğruluğuna bağlı olarak, geçerli iş parçacığının belirtilen milisaniye sayısı boyunca yürütmeyi askıya almasına neden olur. | Bekleme yöntemi, geçerli iş parçacığının başka bir iş parçacığı nesne için notify veya notifyAll yöntemini çağırana kadar beklemesine neden olur. |
Kilitle İlişkilendirme | |
Uyku yöntemi, senkronizasyon sırasında bir nesne üzerindeki kilidi serbest bırakmaz. | Bekleme yöntemi, senkronizasyon sırasında kilidi serbest bırakır. |
Yürütme Yöntemi | |
Uyku yöntemi geçerli iş parçacığında yürütülür. | Nesne üzerinde bekleme yöntemi çağrılır. |
İlişkili Sınıf | |
Uyku, Thread sınıfının bir yöntemidir. | Bekleme, Object sınıfının bir yöntemidir. |
Tamamlama | |
Belirtilen süre dolduktan sonra uyku işlemi tamamlanır. | Bekleme yöntemi, notify veya notifyAll yöntemleri çağrılarak kesintiye uğradı. |
Özet – Java'da uyku vs bekleme
İşletim sisteminde çalışan birden çok işlem var. Her işlem birden fazla iş parçacığına sahip olabilir. Bir iş parçacığı, bir işletim sistemindeki en küçük işlem birimidir. Java programlama dili multithreading'i destekler. Aynı anda birden fazla iş parçacığı çalıştırmaya izin verir. Uyku ve bekleme, çoklu iş parçacığı uygularken kullanılabilecek iki yöntemdir. Java'da uyku ve bekleme arasındaki fark, uykunun belirtilen milisaniye sayısı boyunca geçerli iş parçacığının yürütülmesini askıya almak için kullanılması, wait yöntemi ise geçerli iş parçacığının başka bir iş parçacığının notify veya notifyAll'ı çağırana kadar beklemesini sağlamak için kullanılmasıdır. nesne için yöntem.