2012-05-10 36 views
7

Làm tiêu đề, có cách nào để Bộ hẹn giờ hoạt động dưới ngưỡng một phần nghìn giây không?Bộ định thời: khoảng thời gian nhỏ hơn một phần nghìn giây

Câu hỏi của tôi cũng tương tự như một trong những tiếp theo, nhưng nó là dành cho Java: Thread.Sleep for less than 1 millisecond

+0

Bạn cần đọc bài đăng này http://www.rationaljava.com/2015/10/measuring-microsecond-in-java.html về chủ đề này. – Dan

+0

kiểm tra câu trả lời này để giải quyết: http://stackoverflow.com/a/35189397/4043486 –

Trả lời

11

Nếu bạn muốn ngủ, Thread.sleep có 2 phương pháp, one of which accepts nanoseconds. Nếu bạn muốn lên lịch một tác vụ, bạn có thể sử dụng một phương thức ScheduledExecutorService mà phương pháp schedule cũng có thể sử dụng nano giây.

Như được giải thích bởi @MarkoTopolnik, kết quả sẽ rất có thể không chính xác với nano giây.

+1

Cảm ơn, tôi đã sử dụng Executors.newSingleThreadScheduledExecutor() và nó hoạt động – Hamal000

+2

Mã nguồn của Thread.sleep (các nhà máy, nanos) chỉ hiển thị làm tròn lên bất kỳ nanô nào đến 1 millicesond :) – user2602807

2

Bạn có thể chờ đợi vào một đối tượng mà không ai sẽ thông báo ...

synchronized (someObjectNobodyWillNotify) { 
    try { 
     someObjectNobodyWillNotify.wait(0, nanosToSleep); 
    } 
    catch (InterruptedException e) { 
     Thread.interrupt(); 
    } 
} 

(Trong kịch bản này, tôi đoán wakeups giả mạo là ổn. Nếu không, bạn cần phải ghi System.nanoTime() của bạn lúc bắt đầu và quấn wait trong vòng lặp kiểm tra đủ thời gian đã trôi qua.)

1

Gói java.util.concurrent sử dụng TimeUnit cho thời gian. TimeUnit có trường NANOSECONDS.

4
Thread.sleep(long millis, int nanos) 

Ngoài ra, hãy kiểm tra this answer với chi tiết về vấn đề này trên Windows.

Các vấn đề liên quan