Làm cách nào để trì hoãn một vòng lặp trong một khoảng thời gian 1 giây mà không làm chậm toàn bộ mã/máy tính mà nó đang chạy đến độ trễ một giây (chỉ một vòng lặp nhỏ).Java Trì hoãn/Chờ
Trả lời
Thread.sleep(1000); // do nothing for 1000 miliseconds (1 second)
Sẽ không tạm dừng toàn bộ tập lệnh/máy tính này? –
Điều này sẽ chỉ tạm dừng chủ đề cụ thể mà mã này đang chạy. máy tính của bạn sẽ không bị đóng băng –
Dường như vòng lặp của bạn chạy trên chủ đề chính và nếu bạn làm sleep
về chủ đề đó nó sẽ tạm dừng các ứng dụng (vì chỉ có một thread đã được tạm dừng), để khắc phục điều này bạn có thể đặt mã này trong mới Thread
rằng chạy song song
try{
Thread.sleep(1000);
}catch(InterruptedException ex){
//do stuff
}
hoạt động này hoàn toàn – ERJAN
Như Jigar đã chỉ ra bạn có thể sử dụng chủ đề khác để làm công việc mà có thể hoạt động, ngủ vv một cách độc lập của chủ đề khác. Lớp học java.util.Timer
cũng có thể giúp bạn vì nó có thể thực hiện các tác vụ định kỳ cho bạn mà không cần phải tham gia vào chương trình đa luồng.
Cách đơn giản của tôi để trì hoãn vòng lặp.
Tôi đã đặt mã ở đây sau khi không tuân thủ các tiêu chuẩn của lưu lượng truy cập của stackoverflow.
//1st way: Thread.sleep : Less efficient compared to 2nd
try {
while (true) {//Or any Loops
//Do Something
Thread.sleep(sleeptime);//Sample: Thread.sleep(1000); 1 second sleep
}
} catch (InterruptedException ex) {
//SomeFishCatching
}
//================================== Thread.sleep
//2nd way: Object lock waiting = Most efficient due to Object level Sync.
Object obj = new Object();
try {
synchronized (obj) {
while (true) {//Or any Loops
//Do Something
obj.wait(sleeptime);//Sample obj.wait(1000); 1 second sleep
}
}
} catch (InterruptedException ex) {
//SomeFishCatching
}
//=============================== Object lock waiting
//3rd way: Loop waiting = less efficient but most accurate than the two.
long expectedtime = System.currentTimeMillis();
while (true) {//Or any Loops
while(System.currentTimeMillis() < expectedtime){
//Empty Loop
}
expectedtime += sleeptime;//Sample expectedtime += 1000; 1 second sleep
//Do Something
}
//===================================== Loop waiting
Tôi thích cách thứ ba, bởi vì nó có thể ức chế toàn bộ lõi cpu và không ai sẽ gọi _ever_ này là một mùi mã. – Tom
- 1. Tính duy trì của chú thích Java?
- 2. Cột Ngày/Thời gian Mysql và kiên trì Java
- 3. Java chỉnh sửa ảnh, duy trì tỷ lệ khía cạnh
- 4. Sự kiên trì trên đối tượng Java CI-Bayes
- 5. Bộ sưu tập Java duy trì thứ tự chèn
- 6. Thư viện Java XMPP tích cực duy trì tốt nhất?
- 7. Kết nối và kiên trì với HBase
- 8. JavaQuartz Công việc kiên trì
- 9. Duy trì cookie jQuery
- 10. Trì hoãn khởi động trễ
- 11. Làm thế nào để duy trì tính ổn định cache Hibernate chạy hai ứng dụng Java?
- 12. Nhà cung cấp kiên trì cho Java hỗ trợ các trường cuối cùng
- 13. Bản đồ (bộ sưu tập) duy trì Thứ tự chèn trong java
- 14. Cách tốt nhất để duy trì một tập tin cấu hình cho ứng dụng java
- 15. LinkedHashMap của Java có duy trì thứ tự các khóa không?
- 16. Cách dễ nhất để duy trì các đối tượng java là gì?
- 17. MPMoviePlayerController trì hoãn thường xuyên
- 18. Tiềm năng trì hoãn UDP
- 19. Trì hoãn hoạt ảnh CSS3
- 20. mysql trì hoãn chèn timestamp
- 21. duy trì các tệp web.config
- 22. MSMQ cho sự kiên trì?
- 23. Trì hoãn việc tải JavaScript
- 24. Đối tượng Python kiên trì
- 25. .htaccess Bảo trì nhiều IP
- 26. Attributes Duy trì trên Vectors
- 27. Mojolicious và trì hoãn WebSocket
- 28. Tải tệp .rtf vào RichTextBox và duy trì/duy trì định dạng
- 29. Làm cách nào để duy trì hoạt động trì hoãn LINQ?
- 30. Git: làm thế nào có thể git/linux bảo trì duy trì rất nhiều chi nhánh
_không làm chậm toàn bộ mã_ xây dựng số này –
@JigarJoshi Tôi đang cố trì hoãn vòng lặp này trong khoảng thời gian 1 giây cho plugin Minecraft của mình. Nhưng hầu hết các phương thức chờ đợi tạm dừng toàn bộ máy chủ trong khoảng thời gian đã đặt, thay vì chỉ vòng lặp –
bạn muốn thực hiện vòng lặp while trong một khoảng thời gian cố định và sau đó lại trong thời gian trễ cố định. –