Karşılaştırma Tablosu
Karşılaştırma için temel | uyku | Bekleyin |
---|---|---|
Temel | Uyku 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ıf | Sleep metodu Thread sınıfında tanımlanmıştır. | Wait metodu Object sınıfında tanımlanmıştır. |
Senkronize | Senkronize bağlamda uyku yönteminin çağrılması gerekmez. | Senkronize bağlamda bekleme yönteminin çağrılması gerekir. |
tamamlama | Bir 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. |
Statik | Uyku yöntemi statik bir yöntemdir. | Bekleme yöntemi statik değildir, bu yüzden onu çağırmak için nesneye ihtiyaç duyar. |
infaz | Uyku yöntemi geçerli iş parçacığında yürütülür. | Wait yöntemi nesne üzerinde yürütülür. |
İstisna | InterruptedException | IllegalArgumentException, 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
- 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.
- Sleep yöntemi Thread sınıfında tanımlanırken wait yöntemi Object sınıfında tanımlanır.
- Uyku yönteminin senkronize bağlamdan çağrılması gerekmez. Ancak bekleme yönteminin senkronize edilmiş olması gerekir.
- 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. - Uyku yöntemi statik yöntemdir, bekleme yöntemi ise statik bir yöntem değildir .
- 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.
- 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.