Bir InterruptedException
atılırsa, bir şeyin o iş parçacığını kesmek (genellikle sonlandırmak) istediği anlamına gelir. Bu, iş parçacıkları interrupt()
yöntemine yapılan bir çağrı ile tetiklenir . Bekleme yöntemi bunu algılar ve bir InterruptedException
kod atar, böylece yakalama kodu sonlandırma talebini hemen işleyebilir ve belirtilen süre dolana kadar beklemek zorunda kalmaz.
Tek iş parçacıklı bir uygulamada (ve ayrıca bazı çok iş parçacıklı uygulamalarda) kullanırsanız, bu istisna hiçbir zaman tetiklenmez. Boş bir catch cümlesine sahip olarak görmezden gelmeyi tavsiye etmem. İş InterruptedException
parçacığının atılması , iş parçacığının kesintiye uğramış durumunu temizler, böylece doğru şekilde ele alınmazsa bu bilgi kaybolur. Bu nedenle şunu çalıştırmayı öneriyorum:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
Bu durumu tekrar ayarlar. Bundan sonra yürütmeyi bitirin. Bu, hiç kullanılmamış olsa bile doğru davranış olacaktır.
Daha iyi olan şey şunu eklemektir:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
... catch bloğuna ifade. Bu temelde bunun asla olmaması gerektiği anlamına gelir. Dolayısıyla kod, olabileceği bir ortamda yeniden kullanılırsa bundan şikayetçi olacaktır.