VisualVM - İş Parçacığı Durumları


86

Birisi bana arasındaki farkı açıklayabilir misiniz Sleeping, Wait, Parkve Monitorvisualvm içinde iplik devletler.

görüntü açıklamasını buraya girin

Bulduğum şey bu:

Running: iş parçacığı hala çalışıyor.
Sleeping: iş parçacığı uyuyor (yöntem verimi () iş parçacığı nesnesinde çağrıldı)
Wait: iş parçacığı bir muteks veya engel tarafından engellendi ve başka bir iş parçacığının kilidi serbest bırakmasını bekliyor
Park: park edilmiş iş parçacıkları izin verilene kadar askıya alındı. Bir iş parçacığının beklemenin kaldırılması, genellikle iş parçacığı nesnesinde unpark () yönteminin çağrılmasıyla yapılır: iş
Monitorparçacıkları, yürütmeyi sürdürmek için bir koşulun doğru olmasını bekler.

Anlayamadığım şey, Eyalet Parkı, ipliği gerçekten askıya alan şey nedir? İş parçacığının çalışmasını askıya almasına neyin sebep olduğunu kodda nasıl anlarım?

Lütfen birisi bana bu konuda rehberlik edebilir.

Teşekkürler.

Yanıtlar:


53

Bilmek istediğiniz / ihtiyacınız olan her şeyi açıklayan çok güzel bir şema buldum.

görüntü açıklamasını buraya girin

  1. Yeni

Bir Thread sınıfının bir örneğini oluşturursanız, ancak start () yönteminin çağrılmasından önce iş parçacığı yeni durumdadır.

  1. Runnable

İş parçacığı, start () yönteminin çağrılmasından sonra çalıştırılabilir durumda, ancak iş parçacığı zamanlayıcı onu çalışan iş parçacığı olarak seçmedi.

  1. Koşu

İş parçacığı zamanlayıcı onu seçtiyse iş parçacığı çalışır durumdadır.

  1. Zamanlanmış bekleme

Zamanlanmış bekleme, belirli bir bekleme süresi ile bekleyen bir iş parçacığı için bir iş parçacığı durumudur. Bir iş parçacığı, belirtilen pozitif bekleme süresiyle aşağıdaki yöntemlerden birinin çağrılması nedeniyle zamanlanmış bekleme durumunda:

  • Thread.sleep (uyku süresi)
  • Object.wait (zaman aşımı)
  • Thread.join (zaman aşımı)
  • LockSupport.parkNanos (zaman aşımı)
  • LockSupport.parkUntil (zaman aşımı)
  1. Çalıştırılamaz (Engellenmiş)

Bu, iş parçacığının hala canlı olduğu, ancak şu anda çalıştırılmaya uygun olmadığı durumdur.

  1. Sonlandırılmış

Bir iş parçacığı, run () yöntemi çıktığında sonlandırılmış veya ölü durumda.

Umarım bu sorunuzu yanıtlar :).

Otopark:

İzin mevcut olmadığı sürece iş parçacığı zamanlama amaçları için geçerli iş parçacığını devre dışı bırakır.

Bu şekilde çağırmak isterseniz ipler park ediliyor veya askıya alınıyor çünkü yürütme izni yok. İzin verildikten sonra iş parçacığı açılacak ve çalıştırılacaktır.

LockSupport izinleri iş parçacıklarıyla ilişkilendirilir (yani izin belirli bir iş parçacığına verilir) ve birikmez (yani iş parçacığı izni tükettiğinde iş parçacığı başına yalnızca bir izin olabilir, kaybolur).


Cevabınız için teşekkürler. Bunu da yaşadım ama bir şekilde sorum hala cevapsız kaldı. Lütfen sorumu tekrar gözden geçirir misiniz? Güncelledim Özellikle park durumu için bir cevap arıyorum.
Ali Shah Ahmed

güncelleme için tekrar teşekkürler. Öyleyse park durumunda, iş parçacığı programlanmasını mı bekliyor yoksa bir şart mı bekliyor?
Ali Shah Ahmed

@AliShahAhmed Konu yürütmek için izin (koşul) bekliyor - bu koşul belirli bir süre için karşılanmazsa zaman aşımına ulaşılır ve iş parçacığı sonlandırılır - PS. Haha
yanıtını

40

VisualVM, Java iş parçacığı durumunu (@ Maciej yanıtında açıklandığı gibi) kullanıcı arayüzünde sunulan durumla aşağıdaki şekilde eşler:

BLOCKED -> Monitor
RUNNABLE -> Running
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below)
TERMINATED/NEW -> Zombie

Sleepingve Parkbelirli (zamanlanmış) bekleme durumları:

Sleeping: specifically waiting in Thread.sleep().  
Park:     specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).

(Haritalama, konumunda gerçekleştirilir ThreadMXBeanDataManager.java.)

Java iş parçacığı durumunun kısa (ve yetkili olmayan) bir tartışması burada bulunabilir .

EKLENMEK İÇİN DÜZENLENMİŞTİR:

Yerel yöntemlere yapılan çağrılarda engelleyen iş parçacıklarının JVM'de olduğu gibi göründüğünü RUNNABLEve dolayısıyla VisualVM tarafından Running% 100 CPU olarak rapor edildiğini de belirtmek gerekir .


3
Bu doğru cevap olmalı. Soru, JVM iş parçacığı durumları değil JVisualVM iş parçacığı durumları hakkındaydı.
digital_infinity
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.