VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test
Java Cơ Bản Các Khái Niệm Java OOPs Java String Xử Lý Ngoại Lệ Các Lớp Lồng Nhau

Đa Luồng (Multithreading)

Java Thread Đa luồng trong java Vòng đởi của Thread Tạo Thread Thread Scheduler Sleep một thread Start một thread hai lần Gọi phương thức run() Phương thức join() Đặt tên cho thread Mức ưu tiên của một Thread Luồng hiểm Thread Pool Thread Group Shutdown Hook Thực hiện nhiều task Garbage Collection Lớp Runtime

Java Synchronization

Phương thức synchronization Khối synchronized Đồng bộ static Deadlock trong java Giao tiep giua cac thread Interrupt một Thread
Java AWT Java Swing Java I/O Ví Dụ Java I/O Lập Trình Mạng Với Java Java Date Chuyển Đối Kiểu Dữ Liệu Java Collections Java JDBC Các Tính Năng Mới Trong Java Bài Tập Java Có Lời Giải Câu Hỏi Phỏng Vấn Java
1 / 3
❮ ❯

Interrupt một thread trong java


Giao tiếp giữa các thread trong Java
Học Java I/O

Interrupt một thread trong java hay làm gián đoạn một luồng trong java. Nếu thread nằm trong trạng thái sleep hoặc wait (nghĩa là sleep() hoặc wait() được gọi ra), việc gọi phương thức interrupt() trên thread đó sẽ phá vỡ trạng thái sleep hoặc wait và ném ra ngoại lệ InterruptedException. Nếu thread không ở trong trạng thái sleep hoặc wait, việc gọi phương thức interrupt() thực hiện hành vi bình thường và không làm gián đoạn thread nhưng đặt cờ interrupt thành true. Trước hết chúng ta sẽ quan tâm đến các phương thức được cung cấp bởi lớp Thread để làm gián đoạn một luồng.

3 phương thức được cung cấp bởi lớp Thread để làm gián đoạn một luồng trong java

  • public void interrupt()
  • public static boolean interrupted()
  • public boolean isInterrupted()

Nội dung chính

  • Ví dụ về interrupt một thread trong java khiến thread ngừng hoạt động
  • Ví dụ về interrupt một thread trong java mà thread không ngừng hoạt động
  • Ví dụ về interrupt một thread trong java mà thread hoạt động bình thường
  • Các phương thức isInterrupted và interrupted
  • Ví dụ về interrupt một thread trong java mà thread hoạt động bình thường

Ví dụ về interrupt một thread trong java khiến thread ngừng hoạt động

Trong ví dụ này, sau khi gọi phương thức interrupt() để làm gián đoạn thread, sẽ xảy ra ngoại lệ InterruptedException, dẫn đến thread sẽ ngừng hoạt động. Nếu chúng ta không muốn dừng thread, chúng ta có thể xử lý tại nơi phương thức sleep() hoặc wait() được gọi ra.

File: TestInterruptingThread1.java

public class TestInterruptingThread1 extends Thread {
    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("task");
        } catch (InterruptedException e) {
            throw new RuntimeException("Thread interrupted...\n" + e);
        }
        System.out.println("thread is running...");
    }

    public static void main(String args[]) {
        TestInterruptingThread1 t1 = new TestInterruptingThread1();
        t1.start();
        try {
            t1.interrupt();
        } catch (Exception e) {
            System.out.println("Exception handled \n" + e);
        }
    }
}

Output:

Exception in thread "Thread-0" java.lang.RuntimeException: Thread interrupted...
java.lang.InterruptedException: sleep interrupted
 at vn.test.TestInterruptingThread1.run(TestInterruptingThread1.java:9)

Ví dụ về interrupt một thread trong java mà thread không ngừng hoạt động

Trong ví dụ này, sau khi làm gián đoạn thread, chúng ta xử lý ngoại lệ, vì vậy nó sẽ phá vỡ sleep nhưng thread sẽ không ngừng hoạt động.

public class TestInterruptingThread2 extends Thread {
    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("task");
        } catch (InterruptedException e) {
            System.out.println("Exception handled " + e);
        }
        System.out.println("thread is running...");
    }

    public static void main(String args[]) {
        TestInterruptingThread2 t1 = new TestInterruptingThread2();
        t1.start();
        t1.interrupt();
    }
}

Output:

Exception handled java.lang.InterruptedException: sleep interrupted
thread is running...

Ví dụ về interrupt một thread trong java mà thread hoạt động bình thường

Nếu thread không ở trạng thái sleep hoặc wait, việc gọi phương thức interrupt() sẽ thiết lập cờ interrupted thành true mà về sau có thể được sử dụng để dừng thread bởi lập trình viên.

File: TestInterruptingThread3.java

public class TestInterruptingThread3 extends Thread {

    public void run() {
        for (int i = 1; i <= 5; i++)
            System.out.println(i);
    }

    public static void main(String args[]) {
        TestInterruptingThread3 t1 = new TestInterruptingThread3();
        t1.start();
        t1.interrupt();
    }
}

Output:

1
2
3
4
5

Các phương thức isInterrupted và interrupted

Phương thức isInterrupted() trả về cờ interrupted là true hoặc false. Phương thức static interrupted() trả về cờ interrupted sau đó nó đặt cờ thành false nếu nó là true.

Ví dụ về interrupt một thread trong java mà thread hoạt động bình thường

Nếu thread không ở trạng thái sleep hoặc wait, việc gọi phương thức interrupt() sẽ thiết lập cờ interrupted thành true mà về sau có thể được sử dụng để dừng thread bởi lập trình viên.

File: TestInterruptingThread3.java

public class TestInterruptingThread4 extends Thread {

    public void run() {
        for (int i = 1; i <= 2; i++) {
            if (Thread.interrupted()) {
                System.out.println("thread bị gián đoạn...");
            } else {
                System.out.println("thread bình thường");
            }
        }
    }

    public static void main(String args[]) {
        TestInterruptingThread4 t1 = new TestInterruptingThread4();
        TestInterruptingThread4 t2 = new TestInterruptingThread4();
        t1.start();
        t1.interrupt();
        t2.start();
    }
}

Output:

thread bị gián đoạn...
thread bình thường
thread bình thường
thread bình thường

Giao tiếp giữa các thread trong Java
Học Java I/O

Recent Updates

Xuất dữ liệu ra màn hình console trong JavaCài đặt môi trường JavaJava Swing - Bài tập quản lý sinh viên trong javaLinkedList trong javaArrayList trong javaBài tập java có lời giảiSử dụng Javascript trong HTMLToán tử dấu 2 chấm (::) trong Java 8Lambda Expression - Biểu thức Lambda trong java 8Bài tập Java - Sắp xếp nhanh (Quick Sort) trong JavaBài tập Java - Sắp xếp chèn (Insertion Sort) trong JavaBài tập Java - Sắp xếp nổi bọt (Bubble Sort) trong JavaSắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml