Itu tidak mungkin dijamin akan meningkat, berdasarkan fakta bahwa pengguna berpotensi mengubah waktu sistem di antara panggilan.
Selain itu, itu harus tetap meningkat karena mewakili milidetik sejak zaman. Jika ini adalah "waktu dinding" normal, Anda harus khawatir tentang perubahan waktu pada hari kabisat atau pergantian waktu musim panas.
Tidak, tidak selalu>=semua panggilan sebelumnya.
-
Ini mungkin tidak bertambah setiap kali jika Anda memanggilnya beberapa kali berturut-turut dengan cepat dari utas yang sama (Saya tahu ini =bagian dari>=, tetapi perilaku ini sering mengejutkan orang).
-
Jika Anda memanggilnya beberapa kali berturut-turut dengan cepat dari beberapa utas, itu mungkin melakukan banyak hal -- itu bisa mundur sedikit di seluruh utas dengan jumlah yang sangat kecil, bergantung pada penerapan dan peluang acak.
-
Yang paling serius, nilainya mungkin kembali ke masa lalu dalam jumlah besar jika pengguna (jarang) atau sinkronisasi NTP (kemungkinan umum) menyesuaikan jam sistem.
Jawaban singkatnya adalah tidak, System.currentTimeMillis()
adalah tidak monoton. Ini didasarkan pada waktu sistem, dan karenanya dapat mengalami variasi baik (maju atau mundur) dalam hal penyesuaian jam (misalnya melalui NTP).
System.nanoTime()
monoton, jika dan hanya jika platform dasarnya mendukung CLOCK_MONOTONIC
-- lihat komentar di laporan bug Java 6458294 untuk artikel yang bagus tentang beberapa keadaan di mana ini benar/tidak benar.
(Dan, sebagai anekdot tambahan, saya pribadi telah mengamati (beberapa kali) System.currentTimeMillis()
jalankan 'mundur', dengan tidak adanya penyesuaian jam, melintasi utas - yaitu, panggilan ke metode itu di satu utas mengembalikan nilai yang lebih rendah daripada panggilan di utas lainnya, meskipun itu terjadi secara kronologis setelahnya di 'real-time ')
Jika Anda membutuhkan sumber yang monoton, System.nanoTime()
pada platform yang mendukung kemonotonan adalah pilihan terbaik Anda.