Interrupt một Thread trong Java



Miêu tả vấn đề

Cách interrupt một thread đang chạy trong Java?

Giải pháp

Ví dụ sau minh họa cách interrupt một thread đang chạy bởi sử dụng phương thức interrupt() của lớp Thread và kiểm tra nếu thread đã được interrupted hay chưa bởi sử dụng phương thức isInterrupted() trong Java.

public class GeneralInterrupt extends Object 
implements Runnable {
   public void run() {
      try {
         System.out.println("in run() - 
         about to work2()");
         work2();
         System.out.println("in run() -
         back from  work2()");
      }
      catch (InterruptedException x) {
         System.out.println("in run() -
         interrupted in work2()");
         return;
      }
      System.out.println("in run() - 
      doing stuff after nap");
      System.out.println("in run() - 
      leaving normally");
   }
   public void work2() throws InterruptedException {
      while (true) {
         if (Thread.currentThread().isInterrupted()) {
            System.out.println("C isInterrupted()="
            + Thread.currentThread().isInterrupted());
            Thread.sleep(2000);
            System.out.println("D isInterrupted()="
            + Thread.currentThread().isInterrupted());
         }
      }
   }
   public void work() throws InterruptedException {
      while (true) {
         for (int i = 0; i < 100000; i++) {
            int j = i * 2;
         }
         System.out.println("A isInterrupted()="
         + Thread.currentThread().isInterrupted());
         if (Thread.interrupted()) {
            System.out.println("B isInterrupted()="
            + Thread.currentThread().isInterrupted());
            throw new InterruptedException();
         }
      }
   }
   public static void main(String[] args) {
      GeneralInterrupt si = new GeneralInterrupt();
      Thread t = new Thread(si);
      t.start();
      try {
         Thread.sleep(2000);
      }
      catch (InterruptedException x) {
      }
      System.out.println("in main() - 
      interrupting other thread");
      t.interrupt();
      System.out.println("in main() - leaving");
   }
}

Kết quả

Code trên sẽ cho kết quả sau:

in run() - about to work2()
in main() - interrupting other thread
in main() - leaving
C isInterrupted()=true
in run() - interrupted in work2()

thread_trong_java.jsp