SORU
24 Ocak 2010, Pazar


Java İplik kesme arayan() yöntem'm?

Okudum ve tekrar okumak Java Eşzamanlılık Pratik, okudum çeşitli konuları burada konuyu okudum IBM Madde Dealing with InterruptedException ama bir şey var ben sadece açgözlü olan bence bölünebilir içine iki soru

  1. Eğer hiç başka bir iş parçacığı kendime engel oluyorsam, ne bir tetikleyici olabilirİnterruptedException?

  2. Hiç başka bir iş parçacığı kullanarak kendime engel oluyorsam() kesme(diğer anlamı iş parçacığı iptal etmek için kullanıyorum çünkü diyelim ki, zehir hapları gibi(çalışırken!iptal)döngü her iki JCİP açıklandığı gibi [] tarzı), ne bir yaparİnterruptedExceptionyani o zaman? Bir alıcı üzerine ne yapacağım ben? Kapatma uygulamamı?

CEVAP
24 Ocak 2010, Pazar


İplik kesme mekanizması (işbirliği) bir istek ne yaptığını durdurmak için yanıt vermek için bir iş parçacığı için tercih edilen yoldur. Herhangi bir iş parçacığı (thread kendisi de dahil olmak üzere) bir iş Parçacığı interrupt() diyebilir.

Uygulamada, normal interrupt() çerçeve ya da yöneticisi ne yaptıklarını durdurmak için bazı iş parçacığı anlatmaya mı içeriyor-durumlarda kullanın. Eğer işçi iş parçacığı "" periyodik olarak kesintiye bayrağını kontrol ederek bir istisna ile, veya kesintiye uğramış oldu. o kadar da dikkat edecektir kesme farkında ise Kesintiye uğramış olduğunu fark, terbiyeli bir konu ne yaptığını bırakıp kendi sonunu getirecektir.

Yukarıda durumda kullanmak varsayarak, kodu ise bazı iş parçacığı bir Java çerçeve içinde veya çalıştırılırsa kesintiye uğramış olması muhtemeldir. Ve kesintiye olduğunda, kodunuzun ne yaptığını bırakıp, kendini en uygun şekilde kesilmesine neden olur. Kod adı verildi nasıl bağlı olarak, bu biraz uygun durum atarak döndürerek ya da yapılmış olabilir. Ama muhtemelen System.exit() çağırmalısınız değil. (Uygulama mutlaka kesintiye neden olduğunu değil, ve kesinlikle eğer çerçeve kesintiye edilmesi gereken başka bir iş olup olmadığını bilmez.)

Eğer kodunuzu bazı çerçeve kontrolü altında çalışacak şekilde tasarlanmış ise, diğer taraftan, InterruptedException beklenmedik bir durum olduğunu söyleyebiliriz; yani bir hata. Bu durumda, bu durum diğer böcekleri; örneğin kontrolsüz bir istisna sarın tedavi etmek ve yakalamak ve diğer beklenmedik denetlenmeyen istisnalar ile anlaşma aynı noktada günlük. (Alternatif olarak, uygulamanızın sadece kesme görmezden ve ne yaptığını yapmaya devam edebilir.)


1) asla ve asla başka bir iş parçacığı kendime engel oluyorsam, ne bir İnterruptedException tetikleyebilir?

Bir örnek ExecutorService shutdownNow() servis adı verilen bir Runnable nesneleri kullanarak çalıştırılır. Ve teoride, 3. şahıs veya iş parçacığı havuzu iş parçacığı yönetimi çerçevesinde herhangi bir yasal olarak böyle bir şey yapabilir.

2) Eğer hiç başka bir iş parçacığı kendimi kesme kullanarak bölüyorsam() ... o zaman ne olacak InterruptedException anlama geliyor? Bir alıcı üzerine ne yapacağım ben? Kapatma uygulamamı?

Bulunanla interrupt() kararları ne olduğunu anlamak için analiz etmek ve neden gerekir. Anladım sonra, ^ ne çalışabilir< . << uygulaması bir parçası yapmak gerekiyor.

InterruptedException atılıyor neden bilmek kadar, sabit bir hata; örneğin, günlük dosyası için bir stacktrace baskı olarak tedavi tavsiye ve app kapatmak istiyorum. (Tabii ki, bu her zaman doğru cevap değil ... ama konu şu ki, bu bir "hata" geliştirici dikkatine gerekir, ve / sorumlu.)

3) Nasıl / kim öğrenebilirim ne interrupt() arıyor?

Bu iyi bir cevap yok. Tavsiye edebileceğim en iyi Thread.interrupt() kesme noktası ayarlamak ve çağrı yığını bakmaktır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gee Cee

    Gee Cee

    1 AĞUSTOS 2009
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • sdasmarchives

    sdasmarchive

    2 HAZİRAN 2010