1.Thread.sleep()

Bạn có thể chèn các khoảng tạm dừng vào quá trình thực thi chương trình Java. Điều này thường không cần thiết vì người dùng muốn chương trình của họ chạy càng nhanh càng tốt. Sẽ không có nhiều người hài lòng nếu bạn cố tình làm chậm mã của mình.

Nhưng với tư cách là một lập trình viên, có thể có vô số tình huống mà việc tạm dừng mã của bạn sẽ hữu ích. Ví dụ: giả sử bạn đang viết một trò chơi và bạn muốn trò chơi thực hiện điều gì đó cứ sau hai giây hoặc vài lần trong một giây.

Về cơ bản, tạm dừng rất hữu ích, vì vậy hãy xem cách thêm tạm dừng vào mã của bạn. Nó thực sự rất đơn giản:

Thread.sleep(duration);

Đâu duration là độ dài của thời gian tạm dừng tính bằng mili giây ( 1/1000của một giây).

Câu lệnh này sẽ tạm dừng chương trình của bạn trong duration một phần nghìn giây. Ví dụ:

Thread.sleep(2000);
Tạm dừng chương trình trong 2 giây.
Thread.sleep(500);
Tạm dừng chương trình trong nửa giây.
Thread.sleep(60 * 60 * 1000);
Tạm dừng chương trình trong 1 giờ.

Đây là cách nó có thể được sử dụng trong thực tế. Giả sử chúng ta đang viết một chương trình phóng tàu vũ trụ. Đây là cách mã có thể trông giống như:

for (int i = 10; i > 0; i--)
{
   System.out.println(i);
   Thread.sleep(1000);
}

System.out.println("Let's go!");
Mỗi giây, chương trình sẽ hiển thị một số: 10, then 9, then 8, v.v.




Khi đếm hết 0, chương trình sẽ hiển thị " Let's go!"

2. Tính toán tạm dừng một cách chính xác

Độ dài của thời gian tạm dừng rất dễ tính toán. Nếu bạn cần chương trình thực hiện điều gì đó mỗi giây một lần, thì thời gian tạm dừng là 1000 ms. Nếu 2 lần/giây thì tạm dừng 500ms (1000/2).

Nếu bạn cần làm gì đó 15 lần mỗi giây, hãy tạm dừng trong 66 ms (1000/15). Tất cả có vẻ khá đơn giản:

The duration of one iteration of the loop = 1000 / number of times per second

Nhưng có một sắc thái rất quan trọng ở đây. Mặc dù nhiều câu lệnh thực hiện rất nhanh, nhưng chúng không phải là tức thời.

Nhìn này. Giả sử bạn có một hành động cần 100 mili giây để hoàn thành. Bạn muốn thực hiện hành động này 5 lần mỗi giây. Bạn nên tạm dừng trong bao lâu? Chắc chắn không phải 200ms.

Để hành động được thực hiện 5 lần mỗi giây, chúng tôi cần thời gian cần thiết để thực hiện hành động cộng với thời lượng tạm dừng bằng 200 ms. Nếu chúng ta làm điều đó, thì nó sẽ chạy chính xác 5 lần mỗi giây. Trong trường hợp của chúng tôi, hành động yêu cầu 100 mili giây, có nghĩa là vẫn còn 100 mili giây để tạm dừng.

pause duration = duration of one iteration of the loop - time required to execute the action

Các nhà phát triển trò chơi nhận thức rõ rằng thời gian cần thiết để thực hiện một hành động cao hơn nhiều so với con số không. Và những người chơi game cũng vậy.

Nếu trò chơi chạy ở tốc độ 20 FPS, điều đó có nghĩa là trò chơi đó chỉ có thể vẽ 20 khung hình trên màn hình trong một giây. 1000/20mang lại 50 ms. Đây là thời gian cần thiết để vẽ khung khi chơi trò chơi.



3. Nano giây

Máy tính ngày nay nhanh hơn nhiều so với khi Java được tạo ra. Điều đó có nghĩa là thời gian tạm dừng 1 mili giây có thể không đủ chi tiết.

Giả sử chúng ta có một số hành động siêu ngắn mà chúng ta muốn thực hiện 2000 lần mỗi giây. Làm cách nào để tạm dừng trong nửa mili giây?

Đối với điều này, có một biến thể khác của Thread.sleep()phương pháp:

Thread.sleep(milliseconds, nanoseconds);

Phương pháp này đặt chương trình ở chế độ ngủ trong một lượng mili giây và nano giây đã chỉ định.

Nano giây là 1 phần triệu mili giây. Điều đó có nghĩa là thời gian tạm dừng một mili giây sẽ như thế này:

Thread.sleep(1, 500_000);

Và nếu bạn muốn tạm dừng 1/10một phần nghìn giây, bạn cần viết điều này:

Thread.sleep(0, 100_000);

Bạn có thể không sử dụng phương pháp này trong các chương trình của mình ngay bây giờ. Nhưng tốt hơn là biết về nó và không sử dụng nó hơn là cần nó và không biết về nó.



4. TimeUnitlớp học

Nhân tiện, Java có một lớp khác sẽ giúp cuộc sống của bạn dễ dàng hơn nếu bạn quyết định làm chậm ứng dụng của mình. Chúng ta đang nói về TimeUnitlớp trong java.util.concurrentgói.

Hãy nhớ rằng vì lớp không có trong java.langgói nên bạn cần thêm dòng import java.util.concurrent.TimeUnit;hoặc viết java.util.concurrent.TimeUnitmỗi lần vào mã của mình.

Lớp này thực hiện tương tự như lớp Thread.sleep(), nhưng thuận tiện hơn:

TimeUnit.HOURS.sleep(15)

Mã này sẽ đưa chương trình của bạn vào trạng thái ngủ trong 15 giờ. Phút, giây, ngày cũng có sẵn. Cũng như micro giây (1/1000.000) và nano giây (1/1000.000.000).

Lớp TimeUnit có các thuộc tính sau:

  • nano giây:NANOSECONDS
  • micro giây:MICROSECONDS
  • mili giây:MILLISECONDS
  • giâySECONDS
  • phút:MINUTES
  • giờ:HOURS
  • ngày:DAYS

Làm việc với các thuộc tính này cực kỳ thuận tiện, vì không cần phải suy nghĩ về việc chuyển đổi, chẳng hạn như giờ thành mili giây. Mã như vậy dễ viết và đọc hơn nhiều.

Thông tin chi tiết có thể được đọc ở đây .