2012-12-07 13 views
5

Java'da bir kapatma kancası yürütülürken yakalanmamış bir istisna atılırsa, jvm, kayıtlı duran kancaların geri kalanını çalıştırmadan hemen çıkarılırsa (varsa) ?Java'da bir kapatma kancasının içine bir istisna atıldığında ne olur?

Yakalanmamış istisnalar parçacığının ThreadGroup nesnesinin uncaughtException yöntemini çağırarak, tıpkı diğer parçacığı olduğu gibi kapatma kancalarla bölümde ele alınmakta olup javadocs itibaren. Bu yöntemin varsayılan uygulaması, 'u istisna olarak System.err yığın izini yazdırır ve iş parçacığını sonlandırır; , sanal makinenin çıkmasına veya durmasına neden olmaz.

o çalışmalıdır diğer kapatma kanca gibi görünüyor ... bir takip sorusu olarak

, onun muhtemelen iyi bir fikir değil, potansiyel olarak kapatma çengel bir özel durum kod parçası var mı? Bundan kaçınamazsanız, kapatma kancasının içindeki istisnayı denemek iyi bir uygulamadır mı?

cevap

5

addShutdownHook yöntemi bir iş parçacığı aldığından, her bir ayrı kapatma kancası kendi iş parçacığıdır. Yakalanmamış istisnalar için varsayılan davranış, bir hata mesajı yazdırmak ve İpliği sonlandırmaktır. Kancalar aynı davranışa sahip olduklarından, hata ile biten tek bir kapatma kancası diğerlerinin çalışmasını engellememelidir.

Bunu gerçekten test etmediğimi unutmayın ...

+1

Teşekkürler! Bu davranışı test ettim, haklısınız, belirli bir kapatma kancasının istisnası diğer kancaların çalışmasını engellemez. –

1

Kapanış kancası içinde çalışan kod, ana iş parçacığınızda çalışan kodla aynı en iyi uygulamalara tabidir: Gerekirse, gerek duyduğunuzda oturum açın veya istisnaların yalnızca stdout'a yazdırılmasına izin vermezseniz istisnaları yakalayın.

+0

Ah, bu mantıklı. –

İlgili konular