"Merhaba, Amigo!"

"Şimdi size uyku, verim ve birleştirme yöntemlerinden biraz bahsedeceğim."

"Bu çok sıkıcı. Az önce bir röportaj sorusu buldum: ' verim (), uyku () ve bekleme () yöntemleri arasındaki fark nedir ?'. Bunu açıklayabilir misiniz?"

"Sorun değil. Öncelikle bunlar tamamen farklı üç yöntem."

1) uyku(zaman aşımı)  – geçerli iş parçacığını (uyku çağrılan) zaman aşımı parametresi tarafından belirtilen milisaniye sayısı kadar durdurur. İş parçacığı daha sonra TIMED_WAITING durumuna geçer. isInterrupted bayrağı ayarlanırsa yöntem daha önce sona erebilir.

Örnek Tanım
Thread.sleep(500);
Geçerli iş parçacığı kendi yürütmesini 500 milisaniye veya 0,5 saniye askıya alır.

2) verim()  – geçerli iş parçacığı 'sırasını atlar'. İş parçacığı çalışma durumundan hazır duruma geçer ve JVM bir sonraki iş parçacığına geçer. Çalışıyor ve hazır durumları, RUNNABLE durumunun alt durumlarıdır .

Örnek Tanım
Thread.yield();
Geçerli iş parçacığı "sırasını atlar" ve Java hemen bir sonraki iş parçacığına geçer.

3) wait(timeout) – bu, wait ()  yönteminin bir sürümüdür , ancak zaman aşımı vardır. " Bekleme yöntemi, yalnızca geçerli iş parçacığı tarafından kilitlenmiş bir muteks nesnesindeki eşitlenmiş bir blok içinde çağrılabilir . Aksi takdirde, yöntem bir Yasadışı MonitorState İstisnası oluşturur.

"Bu yöntemin çağrılması, muteks nesnesinin kilidinin serbest kalmasına neden olarak başka bir iş parçacığının edinmesini sağlar. Ayrıca, iş parçacığı BEKLEME durumuna (parametresiz wait() yöntemi için) veya TIMED_WAITING durumuna (bekleme(zaman aşımı için) girer. ) yöntem)."

Örnek Tanım
Object monitor = getMonitor();
synchronized(monitor)
{monitor.wait(500);}
wait yöntemi çağrıldığında, geçerli iş parçacığı izleme nesnesinin kilidini açar ve 500 milisaniye uyur. İzleme nesnesi başka bir iş parçacığı tarafından alınabilir.
500 milisaniye sonra iş parçacığı uyanır ve monitör meşgul değilse iş parçacığı onu alır ve çalışmaya devam eder.
Monitör başka bir iş parçacığı tarafından kilitlenirse, mevcut iş parçacığı BLOCKED durumuna geçer.

4) katılmak(zaman aşımı)

"Bu yöntem sorunuzda yoktu ama benim ders planımda var, o yüzden size anlatacağım. join() veya join(timeout) yöntemini çağırdığınızda, mevcut konu Konuya 'eklenir' bu yöntemi çağırdı. Geçerli iş parçacığı uyku moduna geçer ve birleştiği iş parçacığı bitene kadar bekler (yani, join() yöntemi çağrılan iş parçacığı)."

"Mevcut iş parçacığı, join() yöntemi için BEKLEME durumuna ve birleştirme(zaman aşımı) yöntemi için TIMED_WAITING durumuna giriyor."

Örnek Tanım
Thread thread = getWorkThread();
thread.join(500);
Geçerli iş parçacığı, işçi iş parçacığı iş parçacığına katılacak ve bitmesini bekleyecektir.
Ancak 500 milisaniye sonra 'ayrılacak' ve çalışmaya devam edecek.

"Bekleme(zaman aşımı) ve birleştirme(zaman aşımı) yöntemlerindeki zaman aşımı, yöntemin uykuya geçtiği ve bir şey beklediği anlamına gelir, ancak milisaniye cinsinden verilen zaman aşımından daha uzun sürmez. Ardından uyanır."

"Bu yöntemlerin tek ortak noktası zaman aşımı gibi görünüyor. Tamamen farklı şeyler yapıyorlar."

"Evet, doğru."