2010-09-04 31 views
5

Tôi đi qua kathy sierra SCJP 1.5 Chương 9 (chủ đề) và có nó được đề cập như:Cần chương trình mẫu để ném InterruptedException

Chú ý rằng phương pháp ngủ() có thể ném một InterruptedException kiểm tra (bạn thường sẽ biết nếu đó là một khả năng, vì thread khác đã làm rõ ràng sự gián đoạn), vì vậy bạn phải thừa nhận ngoại lệ với một tay cầm hoặc kê khai

tôi chỉ cần một chương trình mẫu để biết khi nó h appens (mà tôi có thể chạy trên máy tính của tôi)?

Tôi googled nhưng không thể tìm thấy bất kỳ mẫu mã để kiểm tra chức năng này ..

Cảm ơn trước

+0

Bài viết này có thể hữu ích: [Bạn làm gì Với InterruptedException?] (Http://www.yegor256.com/2015/10/20/interrupted-exception.html) – yegor256

Trả lời

19

Dưới đây là một ví dụ:

public class Test 
{ 
    public static void main (String[] args) 
    { 
     final Thread mainThread = Thread.currentThread(); 

     Thread interruptingThread = new Thread(new Runnable() { 
      @Override public void run() { 
       // Let the main thread start to sleep 
       try { 
        Thread.sleep(500); 
       } catch (InterruptedException e) { 
        throw new RuntimeException(e); 
       } 
       mainThread.interrupt(); 
      } 
     }); 

     interruptingThread.start(); 

     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      System.out.println("I was interrupted!"); 
     } 
    } 
} 

Để đi bộ qua nó:

  • Thiết lập chủ đề mới sẽ ngủ trong một thời gian ngắn, sau đó ngắt luồng chính
  • Start new thread
  • Ngủ trong một thời gian dài ish (trong thread chính)
  • In ra một phương pháp chẩn đoán khi chúng ta đang bị gián đoạn (một lần nữa, trong thread chính)

Ngủ trong chủ đề chính không phải là nghiêm chỉnh cần thiết, nhưng điều đó có nghĩa là chủ đề chính không thực sự bắt đầu ngủ trước khi nó bị gián đoạn.

+1

Cảm ơn jon cho câu trả lời nhanh chóng của bạn .. Chỉ tò mò muốn biết là có cách nào, thông qua đó chúng tôi có thể gây ra gián đoạn, ngoại trừ, phương pháp gián đoạn ?? – javanoob

+0

@javanoob: Không phải là tôi biết ... một số phương thức khác có thể gọi là 'ngắt() ', vì vậy nó có thể không rõ ràng với mã của bạn mà' ngắt() 'đã được gọi, nhưng đó là cách cơ bản bạn làm gián đoạn luồng. –

-1
public class SleepTest1 extends Thread { 
@Override 
public void run() { 
    try { 
     for (int i = 0; i < 5; i++) { 
      System.out.println(Thread.currentThread().getName()); 
      Thread.sleep(1000); 
      Thread.currentThread().interrupt(); 
     } 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    SleepTest1 st1 = new SleepTest1(); 
    st1.start(); 
} 

}

+0

Các câu trả lời chỉ có mã được tán thành trong Stack Overflow. Bạn có thể mở rộng câu trả lời này không? –

+0

Mã này không làm gián đoạn giấc ngủ, nó sẽ ngắt sau khi ngủ. Nó không hoàn toàn là những gì OP đang yêu cầu. –

Các vấn đề liên quan