線程方法interrupt的說明
線程的interrupt方法很特殊,有必要在這里著重說明一下。
interrupted方法是查詢是否有“中斷狀態”這一標志,而這一標志很重要很重要。
通常情況下這個標志都是沒有被設置的,一旦這個標志被設置了,則所有當前正在阻塞的方法(限定在由于wait、sleep、join三種方法引發的阻塞)都會立刻完成“跳出阻塞狀態、拋出InterruptedException異常、清除中斷狀態標志”這三件工作。仿佛線程在阻塞時,總在不斷的查詢這一標志,一旦發現這個標志被設置了,那么就立刻發生上述提到的三件工作。不過這只是一種猜測,至于底層到底是如何實現的,我們并不知道。
而我們調用interrupt方法也很有趣,通常這個標志都是未被設置的,一旦調用這個方法,它就會設置這個標志,說白了,這個方法所完成的工作也就僅僅限于設置了一個這樣的標志。接下來就能和上一段落中提到的事情相關聯了,如果線程當前是阻塞的狀態,那么它會利用這個標志啦,然后做“三件事情”,然后這個標志又被清除了;如果線程當前是非阻塞狀態,那么該方法的調用也就僅僅是設置一個標志而已,注意設置了這個標記就和沒設置這個標記完全不同了,一旦你再想調用sleep等阻塞方法時,它們都會“立刻跳出阻塞狀態、拋出異常、清除標記”啦,呵呵。
至此,終于清除了interrupt方法的作用了吧?
posted on 2008-02-23 19:13 so true 閱讀(490) 評論(0) 編輯 收藏 所屬分類: Java