uyku() işlemi birkaç saniye veya istediğiniz süre boyunca tutmak için kullanılan bir yöntemdir ancak wait () yöntemi iş parçacığı bekleme durumuna girerse ve biz bildir () çağrılıncaya kadar otomatik olarak geri gelmez notifyAll ().
En büyük fark , wait () kilidinin veya monitörün serbest kalmasıdır, sleep () ise bekleme sırasında herhangi bir kilit veya monitörün serbest kalmamasıdır. Bekleme iş parçacıkları arası iletişim için kullanılırken, uyku genellikle yürütme sırasında duraklama sağlamak için kullanılır.
Thread.sleep () geçerli iş parçacığını bir süre “Çalıştırılamaz” durumuna gönderir. İş parçacığı, aldığı monitörleri tutar - yani iş parçacığı şu anda senkronize bir blok veya yöntemdeyse, başka hiçbir iş parçacığı bu bloğa veya yönteme giremez. Başka bir iş parçacığı t.interrupt () öğesini çağırırsa, uyku iş parçacığını uyandırır. Uyku durumunun statik bir yöntem olduğunu, yani her zaman geçerli iş parçacığını (uyku yöntemini yürüten yöntemi) etkilediği anlamına gelir. Yaygın bir hata t'nin farklı bir iş parçacığı olduğu t.sleep () işlevini çağırmaktır; o zaman bile, t iplik değil, uyuyacak olan geçerli ipliktir.
object.wait () geçerli iş parçacığını sleep () gibi ama bir bükülme ile “Çalıştırılamaz” durumuna gönderir. Bir iş parçacığında değil, bir nesnede bekleme çağrılır; bu nesneye “kilit nesnesi” diyoruz. Lock.wait () çağrılmadan önce, geçerli iş parçacığı kilit nesnesi üzerinde eşitlenmelidir; wait () daha sonra bu kilidi serbest bırakır ve parçacığı kilitle ilişkili “bekleme listesine” ekler. Daha sonra, başka bir evre aynı kilit nesnesinde senkronize edilebilir ve lock.notify () öğesini çağırabilir. Bu, orijinal, bekleyen ipliği uyandırır. Temel olarak, wait () / notify () işlevi sleep () / interrupt () gibidir, yalnızca etkin iş parçacığının uyku iş parçacığına doğrudan işaretçisi değil, yalnızca paylaşılan kilit nesnesine ihtiyacı vardır.
synchronized(LOCK) {
Thread.sleep(1000); // LOCK is held
}
synchronized(LOCK) {
LOCK.wait(); // LOCK is not held
}
Yukarıdaki tüm noktaları kategorize edelim:
Call on:
- wait (): Bir nesneyi çağırın; geçerli iş parçacığı kilit nesnesinde eşitlenmelidir.
- sleep (): Bir Konuyu Çağırın; her zaman şu anda iş parçacığı yürütülüyor.
Synchronized:
- wait (): senkronize edilmiş birden çok iş parçacığı aynı Nesneye tek tek eriştiğinde.
- sleep (): senkronize edilmiş birden fazla iş parçacığı, uyku iş parçacığının üzerinde uyumayı bekler.
Hold lock:
- wait (): diğer nesnelerin yürütme şansı için kilidi serbest bırakın.
- sleep (): zaman aşımı belirtilirse veya biri kesilirse en az t kez kilitli tutun.
Wake-up condition:
- wait (): nesneyden notify () çağrılıncaya kadar notifyAll ()
- sleep (): en az süre sona erene veya interrupt () çağrısına kadar.
Usage:
- sleep (): zaman senkronizasyonu için;
- wait (): çoklu evre senkronizasyonu için.
Ref: fark sleep
vewait