Giới thiệu về Thread sleep trong Java
Phương thức Thread.sleep()
trong Java được dùng để tạm dừng thực thi của thread (luồng) hiện tại trong một khoảng thời gian được chỉ định bằng mili giây. Giá trị đối số cho mili giây không được âm, nếu không, ngoại lệ IllegalArgumentException
sẽ được sinh ra.
sleep(long millis, int nanos)
là một phương thức khác có thể dùng để tạm dừng thực thi của luồng hiện tại trong một số mili giây và nano giây được chỉ định. Các giá trị nano giây cho phép nằm trong khoảng từ 0
đến 999999
.
Trong bài viết này, bạn sẽ tìm hiểu về Thread.sleep()
của Java.
Cách hoạt động của Thread.sleep()
Thread.sleep()
tương tác với thread scheduler
để đưa thread hiện tại vào trạng thái chờ trong một khoảng thời gian xác định. Khi thời gian chờ kết thúc, trạng thái của thread được chuyển thành trạng thái runnable state và chờ CPU để tiếp tục thực thi. Thời gian thực tế mà thread hiện tại ngủ phụ thuộc vào thread scheduler, vốn là một phần của hệ điều hành.
Các điểm quan trọng của Thread sleep trong Java
- Nó luôn tạm dừng việc thực thi của thread hiện tại.
- Thời gian thực tế thread dừng thực thi và trở lại trạng thái sẵn sàng và bắt đầu thực thi phụ thuộc vào system timers và schedulers. Đối với một hệ thống ít bận rộn, thời gian thực tế cho giấc ngủ gần với thời gian đã chỉ định, nhưng đối với một hệ thống bận rộn, nó sẽ lâu hơn một chút.
Thread.sleep()
không làm mất bất kỳ monitor (trình giám sát) hoặc lock (khóa) nào mà thread hiện tại đã có được.- Bất kỳ thread nào khác có thể gián đoạn thread hiện tại khi đang ngủ, và trong những trường hợp như vậy
InterruptedException
sẽ được ném ra.
Ví dụ vềThread sleep trong Java
Dưới đây là một chương trình ví dụ trong đó Thread.sleep()
được sử dụng để tạm dừng việc thực thi của main thread trong 2 giây (2000 mili giây):
package com.journaldev.threads;
public class ThreadSleep {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread.sleep(2000);
System.out.println("Sleep time in ms = " + (System.currentTimeMillis() - start));
}
}
Đầu tiên, đoạn code này lưu trữ system time hiện tại theo mili giây. Sau đó, nó dừng lại trong 2000 mili giây. Cuối cùng, đoạn code này in ra system time hiện tại mới trừ đi system time hiện tại trước đó:
Output
Sleep time in ms = 2005
Hãy chú ý rằng sự khác biệt này không chính xác là 2000 mili giây. Điều này là do cách Thread.sleep()
hoạt động và việc triển khai thread scheduler
phụ thuộc vào hệ điều hành.
Kết luận
Trong bài viết này, bạn đã tìm hiểu vềThread sleep trong Java.