Java: Ví dụ SimpleThreads


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Ví dụ sau đây nhắc đến một số khái niệm. Lớp SimpleThreads gồm hai luồng. Đầu tiên là luồng chính mà mọi ứng dụng Java đều có. Luồng chính tạo ra một luồng mới từ đối tượng Runnable có tên MessageLoop, và chời cho đến khi kết thúc. Nếu luồng MessageLoop kết thúc trong thời gian quá lâu thì luồng chính sẽ ngắt nó.

Luồng MessageLoop in ra một loạt các thông điệp.. Nếu xảy ra ngắt trước khi nó in xong các thông điệp thì luồng MessageLoop in ra một thông báo và thoát.

public class SimpleThreads {

  // Hiển thị một thông báo, được xử lý bởi
  // tên của thread hiện thời
  static void threadMessage(String message) {
    String threadName =
      Thread.currentThread().getName();
    System.out.format("%s: %s%n",
      threadName,
      message);
  }

  private static class MessageLoop
    implements Runnable {
    public void run() {
      String importantInfo[] = {
        "Mares eat oats",
        "Does eat oats",
        "Little lambs eat ivy",
        "A kid will eat ivy too"
      };
      try {
        for (int i = 0;
             i < importantInfo.length;
             i++) {
          // Dừng 4 giây
          Thread.sleep(4000);
          // In thông báo
          threadMessage(importantInfo[i]);
        }
      } catch (InterruptedException e) {
        threadMessage("Không hoàn thành!");
      }
    }
  }

  public static void main(String args[])
    throws InterruptedException {

    // Độ trễ tính bằng mini giây
    // trước khi ta ngắt luồng
    // MessageLoop (mặc định trong 1 giờ).
    long patience = 1000 * 60 * 60;

    // Nếu có đối số dòng lệnh,
    // thì chờ trong vài giây.
    if (args.length > 0) {
      try {
        patience = Long.parseLong(args[0]) * 1000;
      } catch (NumberFormatException e) {
        System.err.println("Đối số phải là một số nguyên.");
        System.exit(1);
      }
    }

    threadMessage("Bắt đầu luồng MessageLoop");
    long startTime = System.currentTimeMillis();
    Thread t = new Thread(new MessageLoop());
    t.start();

    threadMessage("Chờ cho luồng MessageLoop kết thúc");
    // lặp cho đến khi luồng
    // MessageLoop thoát
    while (t.isAlive()) {
      threadMessage("Vẫn đang chờ...");
      // Chờ tối đa 1 giây để
      // luồng MessageLoop kết thúc.
      t.join(1000);
      if (((System.currentTimeMillis() - startTime) > patience)
        && t.isAlive()) {
        threadMessage("Mệt mỏi vì chờ đợi!");
        t.interrupt();
        // Sẽ không lâu nữa
        // -- chờ vô thời hạn
        t.join();
      }
    }
    threadMessage("Finally!");
  }
}
» Tiếp: Giao thoa luồng
« Trước: Ngắt và kết nối Thread
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!