ICondition.AwaitNanos(Int64) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyebabkan utas saat ini menunggu hingga disinyalir atau terganggu, atau waktu tunggu yang ditentukan berlalu.
[Android.Runtime.Register("awaitNanos", "(J)J", "GetAwaitNanos_JHandler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")]
public long AwaitNanos(long nanosTimeout);
[<Android.Runtime.Register("awaitNanos", "(J)J", "GetAwaitNanos_JHandler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]
abstract member AwaitNanos : int64 -> int64
Parameter
- nanosTimeout
- Int64
waktu maksimum untuk menunggu, dalam nanodetik
Mengembalikan
perkiraan nilai dikurangi nanosTimeout waktu yang dihabiskan untuk menunggu pengembalian dari metode ini.
Nilai positif dapat digunakan sebagai argumen untuk panggilan berikutnya ke metode ini untuk menyelesaikan menunggu waktu yang diinginkan. Nilai yang kurang dari atau sama dengan nol menunjukkan bahwa tidak ada waktu yang tersisa.
- Atribut
Pengecualian
jika utas saat ini terganggu (dan gangguan penangguhan utas didukung)
Keterangan
Menyebabkan utas saat ini menunggu hingga disinyalir atau terganggu, atau waktu tunggu yang ditentukan berlalu.
Kunci yang terkait dengan kondisi ini dirilis secara atomik dan utas saat ini menjadi dinonaktifkan untuk tujuan penjadwalan utas dan terletak tidak aktif sampai em satu/em> dari lima hal terjadi: <ul<>li>Beberapa utas lain memanggil metode untuk ini Condition dan utas #signal saat ini kebetulan dipilih sebagai utas yang akan dibangunkan; atau <li>Beberapa utas #signalAll lain memanggil metode untuk ini Condition; atau <li li><><Beberapa Thread Thread#interuppt lain mengganggu utas saat ini, dan gangguan penangguhan utas didukung; atau <li>Waktu tunggu yang ditentukan berlalu; atau <li>A "<em>spurious wakeup</em"> terjadi. </Ul>
Dalam semua kasus, sebelum metode ini dapat mengembalikan utas saat ini harus memperoleh kembali kunci yang terkait dengan kondisi ini. Ketika utas mengembalikannya adalah em>dijamin <</ em> untuk menahan kunci ini.
Jika utas saat ini: <ul><li>memiliki status terganggu yang diatur pada entri ke metode ini; atau <li>adalah Thread#interuppt terganggu saat menunggu dan gangguan penangguhan utas didukung, </ul> kemudian InterruptedException dilemparkan dan status terganggu utas saat ini dibersihkan. Ini tidak ditentukan, dalam kasus pertama, apakah pengujian untuk gangguan terjadi atau tidak sebelum kunci dilepaskan.
Metode mengembalikan perkiraan jumlah nanodetik yang tersisa untuk menunggu mengingat nilai yang disediakan nanosTimeout saat dikembalikan, atau nilai kurang dari atau sama dengan nol jika waktu habis. Nilai ini dapat digunakan untuk menentukan apakah dan berapa lama untuk menunggu kembali dalam kasus di mana tunggu kembali tetapi kondisi yang ditunggu masih tidak bertahan. Penggunaan umum metode ini mengambil formulir berikut:
{@code
boolean aMethod(long timeout, TimeUnit unit)
throws InterruptedException {
long nanosRemaining = unit.toNanos(timeout);
lock.lock();
try {
while (!conditionBeingWaitedFor()) {
if (nanosRemaining <= 0L)
return false;
nanosRemaining = theCondition.awaitNanos(nanosRemaining);
}
// ...
return true;
} finally {
lock.unlock();
}
}}
Catatan desain: Metode ini memerlukan argumen nanodetik sehingga menghindari kesalahan pemotongan dalam melaporkan sisa waktu. Kehilangan presisi seperti itu akan menyulitkan programmer untuk memastikan bahwa total waktu tunggu tidak lebih pendek secara sistematis dari yang ditentukan ketika penantian ulang terjadi.
<b>Pertimbangan< Implementasi/b>
Utas saat ini diasumsikan untuk menahan kunci yang terkait dengan ini Condition ketika metode ini dipanggil. Terserah implementasi untuk menentukan apakah ini masalahnya dan jika tidak, cara merespons. Biasanya, pengecualian akan dilemparkan (seperti IllegalMonitorStateException) dan implementasinya harus mendokumen fakta tersebut.
Implementasi dapat mendukung respons terhadap gangguan atas pengembalian metode normal sebagai respons terhadap sinyal, atau lebih menunjukkan berlalunya waktu tunggu yang ditentukan. Dalam kedua kasus, implementasi harus memastikan bahwa sinyal dialihkan ke alur tunggu lain, jika ada.
Dokumentasi Java untuk java.util.concurrent.locks.Condition.awaitNanos(long).
Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.