Tavsiye, 2024

Editörün Seçimi

Java'da sleep () ve wait () arasındaki fark

Metot uyku ve bekleme aynı görevi yapmak gibi geliyor, ancak birbirlerinden çok farklılar. Sleep yöntemi Thread sınıfına ve wait yöntemi Object sınıfına aittir. İkisini birbirinden ayıran en önemli fark, uyku yönteminin kesilene veya yürütme işlemini tamamlayana kadar nesnenin üzerindeki kilidi tutmasıdır. Diğer taraftan, wait yöntemi, diğer nesnelerin notify yöntemi ile devam etmesine kadar çalışmasına izin vermek için nesne üzerindeki kilidi serbest bırakır. Uyku ve bekleme yöntemi arasında daha fazla fark var; Bunları aşağıda gösterilen karşılaştırma tablosunda keşfedebilirsiniz.

Karşılaştırma Tablosu

Karşılaştırma için temeluykuBekleyin
TemelUyku yöntemi, kesilinceye kadar bir nesnenin üzerindeki kilidi serbest bırakmaz.Wait yöntemi, bildirmek veya notifyAll yöntemi çağrılıncaya kadar diğer nesnelerin çalıştırmasına izin vermek için nesne üzerindeki kilidi serbest bırakır.
SınıfSleep metodu Thread sınıfında tanımlanmıştır.Wait metodu Object sınıfında tanımlanmıştır.
SenkronizeSenkronize bağlamda uyku yönteminin çağrılması gerekmez.Senkronize bağlamda bekleme yönteminin çağrılması gerekir.
tamamlamaBir iş parçacığı kesildiğinde veya uyku yönteminin süresi dolduğunda Uyku yöntemi yürütme işlemi tamamlanır.Notify () veya notifyAll () yöntemi yarıda kesildiğinde yöntem yürütmenin tamamlanmasını bekleyin.
StatikUyku yöntemi statik bir yöntemdir.Bekleme yöntemi statik değildir, bu yüzden onu çağırmak için nesneye ihtiyaç duyar.
infazUyku yöntemi geçerli iş parçacığında yürütülür.Wait yöntemi nesne üzerinde yürütülür.
İstisnaInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Uyku Yönteminin Tanımı

Sleep yöntemi, Thread sınıfının statik yöntemidir. Bir iş parçacığı belirli bir süre herhangi bir görevi gerçekleştirmek istemediğinde uyku yöntemi çağrılır. Uyku yöntemi, ya yöntemin süresi sona erdiğinde ya da yürütmedeki başka bir iş parçacığı tarafından kesildiğinde yürütmesini tamamlar. Uyku yöntemi tamamlandıktan sonra, iplik çalıştırılabilir durumunu tekrar kazanır. Aşağıda gösterildiği gibi uyku yönteminden iki tane vardır.

 genel statik doğal boş uyku (uzun milisaniye); kamusal statik boşluk uykusu (uzun milisaniye ve int nanosaniye); 

Yukarıdaki iki formda, zamanın uyku yönteminin her iki formunda da belirtildiğini gözlemleyebilirsiniz. Bunun nedeni, bir ipliğin her zaman parametrede belirtilen belirli bir süre boyunca uymasıdır. Uyku yöntemi, yürütme sırasında herhangi bir başka iplik tarafından kesilebilir; Bu nedenle, InterruptedExecption'ı atabilir. İstisnaların ya try / catch bloğu ya da Throws anahtar kelimeleri tarafından ele alınması gerektiğine dikkat etmeniz gerekir, aksi halde derleme zamanı hatasına neden olur. Sleep yöntemi, yürürlükteki nesnenin kilidini yürütme sırasında tutar ve yürütmeyi bitirene kadar başka hiçbir nesnenin yürütülmesine izin vermez.

Bekleme Yönteminin Tanımı

Bekle, Object sınıfında tanımlanan yöntemdir. Wait yöntemi, aynı anda birden fazla görev (iş parçacığı) aynı kaynak için uğraştığında kullanılır. Çalıştırıldığında wait yöntemi, wait yöntemini çağıran nesne üzerindeki kilidi serbest bırakır. Ve başka bir nesneye, bir bildirme yöntemi çağrılana kadar yürütülmesi için bir şans sağlayın; bu, bekletme yöntemi tarafından serbest bırakılan nesne üzerindeki kilidi daha da devam ettirir. Wait yöntemi aşağıdaki forma sahiptir.

 Bekleyin(); bekle (uzun milisaniye); bekle (uzun milisaniye, int nanosaniye); 

Bekleme yönteminin yukarıdaki üç formunda olduğu gibi, ilk yöntemde zaman parametresi yoktur, bu, bekleme yönteminin yürütülmesinin bildirime kadar devam edeceği veya notifyAll yönteminin başlatılmadığı anlamına gelir. Geri kalan iki yöntem zaman parametrelerine sahiptir. Bu yüzden, süre doluncaya kadar veya bildirinceye kadar veya noitfyAll yönteminin süresinin dolmasından daha erken çağrılana kadar yürütülürler. Bekleme yöntemi istisnalar atabilir. IllegalArgumentException, eğer zaman argümanı geçti ise negatif. Geçerli iş parçacığı kaynak kullanmıyorsa, IllegalMonitorStateException. Bekleme yöntemi kesintiye uğradıysa InterruptedException.

Java'da Uyku ve Bekleme Yöntemi Arasındaki Temel Farklılıklar

  1. Uyku ve bekleme yöntemini ayıran en önemli nokta, uyku yönteminin nesnenin üzerindeki kilidi kesilinceye veya süresi doluncaya kadar tutmasıdır. Ancak wait yöntemi, onu çağıran nesne üzerindeki kilidi serbest bırakır ve diğer nesnelere yürütme şansı verir.
  2. Sleep yöntemi Thread sınıfında tanımlanırken wait yöntemi Object sınıfında tanımlanır.
  3. Uyku yönteminin senkronize bağlamdan çağrılması gerekmez. Ancak bekleme yönteminin senkronize edilmiş olması gerekir.
  4. Metodun zamanının dolması veya diğer iplik tarafından kesilmesi durumunda uyku metodu uyandırılır. Bekleme yöntemi uyandırıldı
    bildir veya bildir Tüm yöntemler çağrıldığında.
  5. Uyku yöntemi statik yöntemdir, bekleme yöntemi ise statik bir yöntem değildir .
  6. Sleep yöntemi geçerli iş parçacığında yürütülürken, wait yöntemi onu başlatan nesnede yürütülür.
  7. Uyku yöntemi tarafından atılan istisna InterruptedException iken, wait yöntemi ile oluşturulan istisnalar ise IllegalArgumentException , IllegalMonitorStateException, InterruptedException şeklindedir .

Sonuç:

Birden fazla iş parçacığı aynı kaynağı birer birer kullanmak istediğinde, wait yöntemi kullanılmalıdır. Bir iş parçacığı herhangi bir görevi gerçekleştirmek istemediğinde, uyku yöntemi kullanılmalıdır.

Top