java nanos_java命名空间java.util.concurrent.locks接口condition的类成员方法:awaitnanos定义及介绍...
造成當(dāng)前線程在接到信號、被中斷或到達指定等待時間之前一直處于等待狀態(tài)。
與此條件相關(guān)的鎖以原子方式釋放,并且出于線程調(diào)度的目的,將禁用當(dāng)前線程,且在發(fā)生以下五種情況之一 以前,當(dāng)前線程將一直處于休眠狀態(tài):其他某個線程調(diào)用此 方法,并且碰巧將當(dāng)前線程選為被喚醒的線程;或者
其他某個線程調(diào)用此 condition 的 signalall() 方法;或者
其他某個線程中斷當(dāng)前線程,且支持中斷線程的掛起;或者
已超過指定的等待時間;或者
發(fā)生“虛假喚醒”。
在所有情況下,在此方法可以返回當(dāng)前線程之前,都必須重新獲取與此條件有關(guān)的鎖。在線程返回時,可以保證 它保持此鎖。
如果當(dāng)前線程:在進入此方法時已經(jīng)設(shè)置了該線程的中斷狀態(tài);或者
在支持等待和中斷線程掛起時,線程被中斷,
則拋出 interruptedexception,并且清除當(dāng)前線程的已中斷狀態(tài)。在第一種情況下,沒有指定是否在釋放鎖之前發(fā)生中斷測試。
在返回時,該方法返回了所剩毫微秒數(shù)的一個估計值,以等待所提供的 nanostimeout 值的時間,如果超時,則返回一個小于等于 0 的值。可以用此值來確定在等待返回但某一等待條件仍不具備的情況下,是否要再次等待,以及再次等待的時間。此方法的典型用法采用以下形式:synchronized boolean amethod(long timeout, timeunit unit) {
long nanostimeout = unit.tonanos(timeout);
while (!conditionbeingwaitedfor) {
if (nanostimeout > 0)
nanostimeout = thecondition.awaitnanos(nanostimeout);
else
return false;
}
// ...
}
設(shè)計注意事項:此方法需要一個 nanosecond 參數(shù),以避免在報告剩余時間時出現(xiàn)截斷錯誤。在發(fā)生重新等待時,這種精度損失使得程序員難以確保總的等待時間不少于指定等待時間。
實現(xiàn)注意事項
假定調(diào)用此方法時,當(dāng)前線程保持了與此 condition 有關(guān)聯(lián)的鎖。這取決于確定是否為這種情況以及不是時,如何對此作出響應(yīng)的實現(xiàn)。通常會拋出一個異常(比如 illegalmonitorstateexception)并且該實現(xiàn)必須對此進行記錄。
與響應(yīng)某個信號而返回的普通方法相比,或者與指示所使用的指定等待時間相比,實現(xiàn)可能更喜歡響應(yīng)某個中斷。在任意一種情況下,實現(xiàn)必須確保信號被重定向到另一個等待線程(如果有的話)。
參數(shù):nanostimeout - 等待的最長時間,以毫微秒為單位返回:nanostimeout 值減去花費在等待此方法的返回結(jié)果的時間的估算。正值可以用作對此方法進行后續(xù)調(diào)用的參數(shù),來完成等待所需時間結(jié)束。小于等于零的值表示沒有剩余時間。拋出:interruptedexception - 如果當(dāng)前線程被中斷(并且支持中斷線程掛起)
總結(jié)
以上是生活随笔為你收集整理的java nanos_java命名空间java.util.concurrent.locks接口condition的类成员方法:awaitnanos定义及介绍...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么类的下行转换是不安全的_类型转换
- 下一篇: java输出孪生素数对数_为什么孪生素数