Java: Thread.currentThread (). Sleep (x) ile Thread.sleep (x) karşılaştırması


86

Bu benim kodumda var

Thread.currentThread().sleep(x);

Eclipse bana statik kullanmamı söylüyor

Thread.sleep(x); 

bunun yerine neden? Aradaki fark nedir, bu 2 yöntem arasında işlevsellik açısından hiç fark var mı?


1
Eclipse'de, örnek değişkenleri üzerinden statik üye erişimini sınıf adı aracılığıyla statik erişimle otomatik olarak değiştirecek bir 'Eylemi Kaydet' vardır - bu Kaydetme Eylemini ve kabul ettiğiniz diğer Kaydetme Eylemlerinin çoğunu etkinleştirin (örneğin, gereksiz yayınlamaları kaldırın, gereksiz 'bu', vb.).
les2

Yanıtlar:


136

İki değil tek bir yöntem vardır ve bu statiktir. Örnek referansı aracılığıyla statik bir yöntemi çağırabilseniz de, bu iyi bir stil değildir. Programcının bir örnek yöntemi çağırdığını düşündüğünü gösterir. Kafası karışmış bir programcı, başka bir iş parçacığının (mevcut olanın değil) bu şekilde uyumasına neden olabileceğini düşünüyor olabilir, ancak bu öyle değil.

Her iki kod satırınız da aynı şeyi yapar, ancak ikincisi daha iyi stildir.


25
+1, programcının belli bir iş parçacığını someThread.sleep () yoluyla uyutmak isteyebileceğini belirtmek için bunu yapmaz.
Chii

32

Java'da uyku statik bir yöntemdir. Her iki örneğiniz de tamamen aynı şeyi yapıyor, ancak önceki sürüm kafa karıştırıcı çünkü belirli bir nesnede bir yöntemi çağırıyor gibi görünüyor, ancak bunu hiç yapmıyor. Örneğinizde çok önemli olmayacak, ancak aşağıdakilere sahipseniz daha tehlikelidir:

someOtherThread.sleep(x);

Bu sefer başka bir iş parçacığına uyumasını söylüyormuşsunuz gibi görünüyor, ama aslında şu anki iş parçacığını uyutuyorsunuz. Bu tür bir hatadan kaçınmanın yolu, her zaman belirli bir nesne yerine sınıfı kullanarak statik yöntemleri çağırmaktır.


Bu tek satırı "someOtherThread.sleep (x);" yürütürken hem currentThread hem de someOtherThread uyku moduna geçecek mi? ??
Kanagavelu Sugumar

3
Hayır. Geçerli iş parçacığı, .sleep hangi Thread nesnesi çağrılırsa çağrılsın, uykuya geçecektir. Diğer ThreadS'leri uyutamazsınız (bunun gibi).
Tork

3

İki yöntem çağrısı davranış açısından aynıdır çünkü aynı yöntemi çağırırlar, ancak statik alanlara ve yöntemlere erişmek için örnek yerine sınıf adını ( bu durumda Thread ) kullanmak, bu statikliği netleştirir. Bu uyarının üretilmesinin nedeni budur.

Ancak statik alanların ve yöntemlerin çoğu IDE'de belirli bir şekilde gösterildiğini düşünürsek (örneğin Eclipse ve IntelliJ IDEA'da italik yazı tipiyle), bu uyarı yine de gerekli mi? Belki Java'nın ilk günlerinde basit editörlerin kullanımda olduğu kadar gerekli değil.


0

Thread.currentThread().sleep(x);ya da Eclipse'in söylediği gibiThread.sleep(x); , ihtiyaç duyuluyorsa statik bağlam gereklidir, bu yüzden bu uykuda biraz gecikmeyi bekleriz.

Bir nesne tarafından belirlenen statik paradigma, yalnızca o belirli nesne yığını yazdırma yaşam döngüsünü etkiler, yine genel Nesne Yaşam Döngüsü statikinin o kadar da rahatsız edici olmadığı düşünüldüğünde, gerekirse kodlamayı kolaylaştırmak için kullanılabilir, ancak statik ayak olarak dikkatlice yapılmalıdır. print, Class(örneğin: - Class.forName(pkg.className)) ile aynı şekilde isme göre anılır objectve sınıfın çalışma anında tek baskı kopyası olan herhangi biri tarafından değil .HEAP bellekteki .

Yine nesnenin kullanımının ayrıca Zayıf, Hayalet, Güçlü tür referanslar tarafından artıları ve eksileri vardır ....,

Kod Doğa Tarafından Çevrilmiştir. İşleyişini ve işlevselliğini sağlamak için bizim yaptığımız yöntem bu.


1
İş parçacığı hakkında konuşmak gerekirse, eşzamanlı olarak ortaya çıkar, ancak iş parçacığında eşzamanlı şeyler olabilir. Doğası gereği her şey eşzamansızdır, ancak bazen eşzamanlı olan şeyler de bulabiliriz. Kuantum veya Astronomiye girsek bile hiçbir şey senkronize değil.
Dev Anand Sadasivam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.