SORU
13 Aralık 2010, PAZARTESİ


Nasıl bir iş parçacığı anında soket IO engelleme işlemi sona erdirmek için?

Bağlamında Java, ben yeni bir iş parçacığı okuma ağ giriş açık bir GUI pencere ve pencereyi kapatıyorum istiyorum bırakın soket kaynak sona erer konu hemen. Şimdi setSoTimeout yöntemi kullanıyorum, ama zaman aşımı özel durum beklemek istemiyorum. Biri bir öneri verebilir misiniz? Teşekkürler!

CEVAP
13 Aralık 2010, PAZARTESİ


(Potansiyel olarak) bunu yapmak için üç yolu vardır:

  • Soket Socket.close() arama InputStream OutputStream ilişkili nesneleri kapatın ve herhangi bir iş parçacığı Yuva veya (ilişkili) bir akış işlemleri bloke engellenmemiş neden olur. Bu javadoc göre, soket kendisini işlemleri SocketException bir durum oluşturur.

  • Thread.interrupt() arama (bazı durumlarda bu belirtilmemiş) engelleme G/Ç işlemi, InterruptedIOException atmak için neden kesecektir.

    Uyarı not. "(Kesme)" yaklaşım "en" modern Java platformları. işe yaramıyor anlaşılan Eğer bir başkası zaman ve eğim olsa, bu yaklaşım çalışır koşulları araştırmak olabilirler. Ancak, bu davranış, belirli bir platform olduğu gerçeği ise yalnızca kendi uygulama belirli bir platform üzerinde çalışmak gerekiyorsa sadece onu kullanmanız gerektiğini söylemek yeterli olacaktır. Hangi "dene" kendin için.) kolayca

  • Bunu yapmak için mümkün olan üçüncü bir yol Socket.shutdownInput() ve/veya Socket.shutdownOutput() aramak. Bu javadocs okuyup şu anda engellenen işlemleri/yazma ile olmuyor açıkça söyleme, ama mantıksız ve bir istisna engelini atarlar düşünmek değildir. Eğer javadoc neler olacağını söylemiyor eğer doğru değilse ancak, bu davranış, belirli bir platform olarak kabul edilmelidir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • majesticdubstep

    majesticdubs

    3 Kasım 2011
  • Slave Boy Films - Fandom from a Galaxy Far Far Away

    Slave Boy Fi

    12 HAZİRAN 2009