2016-04-05 19 views
0

Sana InterruptedExceptions yakalamak ancak örneğin aşağıda kesme durum ..like korumak durumlarda ilgileniyorumHangi durumda kesme durumunu koruyorsunuz?

try{ 
    //Some code 
    } catch (InterruptedException ie) { 
     // (Re-)Cancel if current thread also interrupted 
     pool.shutdownNow(); 
     // Preserve interrupt status 
     Thread.currentThread().interrupt(); 
    } 
+1

Bununla ilgili bir şey yapmanız gerektiğinde? – Guy

cevap

0

Sen yeniden kesintiye Eğer bir kesinti meydana olduğunu bilmek arayanların gerekir, ancak yapamıyorsanız iplik Yöntem throws InterruptedException yöntemini bildirmek için yöntem imzasını değiştirin.

Eğer java.lang.Runnable uyguladıklarını Örneğin, bir kontrol istisnalar eklemek için yöntem imzası değiştiremezsiniz: Yani

interface Runnable { 
    void run(); 
} 

Eğer Runnable uygulanmasında bir InterruptedException atar şey yapmak ve eğer

class SleepingRunnable implements Runnable { 
    @Override public void run() { 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) { 
     Thread.currentThread().interrupt(); 
    } 
    } 
} 

Eğer yöntem imzasını değiştirmek mümkün değilse, bunu yapmak için daha iyidir: Eğer bu parçacığı üzerinde kesintiye bayrağı belirlesin idare sınıflar çağıran izin vermek, idare edemiyoruz Yani: InterruptedException kontrol edilmiş bir istisna olduğundan, arayanlar bunu işlemeye zorlanır. Bu, iş parçanızın daha açık bir şekilde kesintiye uğramasına neden olur.

+0

Bu iyi bir genel açıklamadır, ancak örneğiniz çok iyi değildir. run yönteminde, iş parçacığının kesintiye uğradığı hiçbir şey olmayacaktır (yöntem geri döndüğünde durum silinecektir). – jtahlborn

+0

@jtahlborn bunu genelde bilmiyorsunuz. Runnable.run() 'her yerde * çalıştırılabilir *; Söylediğiniz şey sadece bir iş parçacığı veya bir standart yürütme uygulaması tarafından çalıştırılıyorsa doğrudur. –

+0

teknik olarak haklısınız, ama ne kadar sıklıkla bir iş parçacığında veya yürütücüsünde Runnable'da koşuyorsunuz? – jtahlborn