Java: Ví dụ SimpleThreads
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!"); } }