4.4異步關(guān)閉能力 任何時候都有可能關(guān)閉一個通道或者取消一個選擇鍵。除非您采取步驟進(jìn)行同步,否則鍵的狀態(tài)及相關(guān)的通道將發(fā)生意料之外的改變。一個特定的鍵的集合中的一個鍵的存在并不保證鍵仍然是有效的,或者它相關(guān)的通道仍然是打開的。 關(guān)閉通道的過程不應(yīng)該是一個耗時的操作。NIO的設(shè)計者們特別想要阻止這樣的可能性:一個線程在關(guān)閉一個處于選擇操作中的通道時,被阻塞于無限期的等待。當(dāng)一個通道關(guān)閉時,它相關(guān)的鍵也就都被取消了。這并不會影響正在進(jìn)行的select(),但這意味著在您調(diào)用select()之前仍然是有效的鍵,在返回時可能會變?yōu)闊o效。您總是可以使用由選擇器的selectKeys()方法返回的已選擇的鍵的集合:請不要自己維護(hù)鍵的集合。理解3.4.5小節(jié)描述的選擇過程,對于避免遇到問題而言是非常重要的。 您可以參考4.3.2小節(jié),以詳細(xì)了解一個在select()中阻塞的線程是如何被喚醒的。 如果您試圖使用一個已經(jīng)失效的鍵,大多數(shù)方法將拋出CancelledKeyException。但是,您可以安全地從從已取消的鍵中獲取通道的句柄。如果通道已經(jīng)關(guān)閉時,仍然試圖使用它的話,在大多數(shù)情況下將引發(fā)ClosedChannelException。 Java nio入門教程詳解(三十九) 00 我們認(rèn)為:用戶的主要目的,是為了獲取有用的信息,而不是來點擊廣告的。因此本站將竭力做好內(nèi)容,并將廣告和內(nèi)容進(jìn)行分離,確保所有廣告不會影響到用戶的正常閱讀體驗。用戶僅憑個人意愿和興趣愛好點擊廣告。 我們堅信:只有給用戶帶來價值,用戶才會給我們以回報。 |
|