FileChannel.Lock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| Lock() |
取得該頻道檔案的獨家鎖定。 |
| Lock(Int64, Int64, Boolean) |
鎖定該頻道檔案的指定區域。 |
Lock()
取得該頻道檔案的獨家鎖定。
[Android.Runtime.Register("lock", "()Ljava/nio/channels/FileLock;", "")]
public Java.Nio.Channels.FileLock? Lock();
[<Android.Runtime.Register("lock", "()Ljava/nio/channels/FileLock;", "")>]
member this.Lock : unit -> Java.Nio.Channels.FileLock
傳回
一個代表新取得鎖的鎖物件
- 屬性
例外狀況
檔案通道已關閉。
此頻道未開放寫作。
要麼已有鎖與此鎖請求重疊,要麼有其他執行緒等待取得與此請求重疊的鎖。
呼叫執行緒在等待取得鎖時被中斷。
在呼叫執行緒等待取得鎖時,通道是關閉的。
若在取得請求鎖時再次發生 I/O 錯誤。
備註
取得該頻道檔案的獨家鎖定。
此形式的 fc.lock() 呼叫與呼叫完全相同
fc.{@link #lock(long,long,boolean) lock}(0L, Long.MAX_VALUE, false)
Java 文件 java.nio.channels.FileChannel.lock()。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
Lock(Int64, Int64, Boolean)
鎖定該頻道檔案的指定區域。
[Android.Runtime.Register("lock", "(JJZ)Ljava/nio/channels/FileLock;", "GetLock_JJZHandler")]
public abstract Java.Nio.Channels.FileLock? Lock(long position, long size, bool shared);
[<Android.Runtime.Register("lock", "(JJZ)Ljava/nio/channels/FileLock;", "GetLock_JJZHandler")>]
abstract member Lock : int64 * int64 * bool -> Java.Nio.Channels.FileLock
參數
- position
- Int64
鎖定區域起始的位置;必須是非負數
- size
- Int64
鎖定區域的大小;必須是非負的,且 position和 + size 必須非負
- shared
- Boolean
true 請求共用鎖,此時此通道必須開啟以供讀取(甚至可能寫入); false 請求獨佔鎖,此時此通道必須開放以寫入(甚至可能讀取)
傳回
一個代表新取得鎖的鎖物件
- 屬性
例外狀況
若 position 或 size 為負值。
如果這個頻道被關閉了。
如果所請求的區域與現有鎖或待處理的鎖請求重疊。
如果通道未以讀取模式開啟,但共享為真。
若通道未在寫入模式下開啟但共享,則為假。
如果該通道在此方法執行時被另一執行緒關閉,
如果執行緒在等待所需檔案鎖定的狀態中被中斷,
如果再發生一次 I/O 錯誤。
備註
鎖定該頻道檔案的指定區域。
呼叫此方法會阻塞,直到區域被鎖定、該通道關閉或呼叫執行緒被中斷,以先發生者為準。
若在呼叫此方法時被其他執行緒關閉,則會拋出 a AsynchronousCloseException 。
如果呼叫執行緒在等待取得鎖時被中斷,則其中斷狀態會被設定並拋出 a FileLockInterruptionException 。 如果呼叫者在呼叫此方法時已設定中斷狀態,則該例外會立即拋出;執行緒的中斷狀態不會被更改。
由 和 position 參數指定的size區域不必包含於實際底層檔案內,甚至不必重疊。 閘區大小固定;如果一個鎖定區域最初包含檔案的末尾,且檔案超出該區域,那麼新檔案部分將不會被鎖定覆蓋。 如果檔案預期會變大,且需要對整個檔案進行鎖定,則應鎖定從零開始且不小於檔案預期最大大小的區域。 零參數 #lock() 方法簡單地鎖定大小 Long#MAX_VALUE為 的區域。
部分作業系統不支援共享鎖,此時共享鎖的請求會自動轉換成專屬鎖的請求。 新取得的鎖是共享還是獨佔,可以透過調用所得鎖物件的方法 FileLock#isShared() isShared 來測試。
檔案鎖是代表整個 Java 虛擬機器持有的。 它們不適合在同一虛擬機器內控制多個執行緒對檔案的存取。
Java 文件 java.nio.channels.FileChannel.lock(long, long, boolean)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。