Saya telah mencoba untuk menunda - atau menidurkan - program Java saya, tetapi kesalahan terjadi.
Saya tidak dapat menggunakan Thread.sleep(x)
atau wait()
. Pesan kesalahan yang sama muncul:
java.lang.InterruptedException yang tidak dilaporkan tidak dilaporkan; harus ditangkap atau dinyatakan dibuang.
Apakah ada langkah yang diperlukan sebelum menggunakan metode Thread.sleep()
atau wait()
?
Jawaban:
Anda memiliki banyak bacaan di depan Anda. Dari kesalahan kompiler melalui penanganan eksepsi, interupsi threading dan thread. Tetapi ini akan melakukan apa yang Anda inginkan:
sumber
Seperti yang dikatakan pengguna lain, Anda harus mengelilingi panggilan Anda dengan sebuah
try{...} catch{...}
blok. Tetapi sejak Java 1.5 dirilis, ada kelas TimeUnit yang melakukan hal yang sama dengan Thread.sleep (millis) tetapi lebih nyaman. Anda dapat memilih unit waktu untuk operasi tidur.Juga memiliki metode tambahan: TimeUnit Oracle Documentation
sumber
try-catch
penanganan pengecualian yang diperlukan .Lihat tulisan singkat yang luar biasa ini tentang cara melakukan ini dengan benar.
Intinya: tangkap
InterruptedException
. Ingatlah bahwa Anda harus menambahkan catch-block ini. Pos menjelaskan ini sedikit lebih jauh.sumber
Gunakan konstruksi kode berikut untuk menangani pengecualian
sumber
Masukkan
Thread.sleep
blok percobaan Andasumber
Saat menggunakan Android (satu-satunya saat ketika saya menggunakan Java) Saya akan merekomendasikan menggunakan handler daripada meletakkan utas tidur.
Referensi: http://developer.android.com/reference/android/os/Handler.html
sumber
Coba ini:
sumber
Exception
di Jawa?Cara saya menambahkan penundaan ke program Java.
Ini untuk penundaan berurutan tetapi untuk penundaan Loop, lihat Java Delay / Wait .
sumber
misalnya:-
sumber
Cara yang lebih sederhana untuk menunggu adalah menggunakan
System.currentTimeMillis()
, yang mengembalikan jumlah milidetik sejak tengah malam pada 1 Januari 1970 UTC. Misalnya, menunggu 5 detik:Dengan cara ini, Anda tidak perlu repot dengan utas dan pengecualian. Semoga ini membantu!
sumber
Gunakan
java.util.concurrent.TimeUnit
:Tidur selama satu detik atau
Tidur sebentar.
Karena ini adalah loop, ini menyajikan masalah bawaan - drift. Setiap kali Anda menjalankan kode dan kemudian tidur, Anda akan terhanyut sedikit dari berlari, katakanlah, setiap detik. Jika ini masalah maka jangan gunakan
sleep
.Lebih jauh,
sleep
tidak terlalu fleksibel dalam hal kontrol.Untuk menjalankan tugas setiap detik atau pada penundaan satu detik saya sangat merekomendasikan [
ScheduledExecutorService
] [1] dan [scheduleAtFixedRate
] [2] atau [scheduleWithFixedDelay
] [3].Untuk menjalankan metode
myTask
setiap detik (Java 8):sumber
Thread.sleep()
sederhana untuk pemula dan mungkin sesuai untuk unit test dan bukti konsep.Tapi tolong JANGAN gunakan
sleep()
untuk kode produksi. Akhirnyasleep()
mungkin akan sangat menggigit Anda.Praktik terbaik untuk aplikasi java multithreaded / multicore untuk menggunakan konsep "thread wait". Tunggu, lepaskan semua kunci dan monitor yang dipegang oleh utas, yang memungkinkan utas lain memperoleh monitor itu dan melanjutkan sementara utas Anda tidur dengan damai.
Kode di bawah ini menunjukkan teknik itu:
DelayUtil
penerapan:sumber
Atau, jika Anda tidak ingin berurusan dengan utas, coba metode ini:
Itu dimulai ketika Anda memanggilnya, dan berakhir ketika jumlah detik telah berlalu.
sumber