AsynchronousFileChannel.Lock 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| Lock() |
取得該頻道檔案的獨家鎖定。 |
| Lock(Object, ICompletionHandler) |
取得該頻道檔案的獨家鎖定。 |
| Lock(Int64, Int64, Boolean) |
鎖定該頻道檔案的指定區域。 |
| Lock(Int64, Int64, Boolean, Object, ICompletionHandler) |
鎖定該頻道檔案的指定區域。 |
Lock()
取得該頻道檔案的獨家鎖定。
[Android.Runtime.Register("lock", "()Ljava/util/concurrent/Future;", "", ApiSince=26)]
public Java.Util.Concurrent.IFuture? Lock();
[<Android.Runtime.Register("lock", "()Ljava/util/concurrent/Future;", "", ApiSince=26)>]
member this.Lock : unit -> Java.Util.Concurrent.IFuture
傳回
一個 Future 代表待處理結果的物件
- 屬性
備註
取得該頻道檔案的獨家鎖定。
此方法會啟動操作以取得該通道檔案的專屬鎖。 該方法回傳 a Future 代表操作的待處理結果。
Future該Future#get() get方法在成功完成後回傳 。FileLock
此方法的呼叫行為與呼叫完全相同
ch.{@link #lock(long,long,boolean) lock}(0L, Long.MAX_VALUE, false)
Java 文件 java.nio.channels.AsynchronousFileChannel.lock()。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
Lock(Object, ICompletionHandler)
取得該頻道檔案的獨家鎖定。
[Android.Runtime.Register("lock", "(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "", ApiSince=26)]
[Java.Interop.JavaTypeParameters(new System.String[] { "A" })]
public void Lock(Java.Lang.Object? attachment, Java.Nio.Channels.ICompletionHandler? handler);
[<Android.Runtime.Register("lock", "(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "", ApiSince=26)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "A" })>]
member this.Lock : Java.Lang.Object * Java.Nio.Channels.ICompletionHandler -> unit
參數
- attachment
- Object
要附加到 I/O 操作上的物件;可以是 null
- handler
- ICompletionHandler
處理者會處理結果
- 屬性
備註
取得該頻道檔案的獨家鎖定。
此方法會啟動操作,以取得該通道檔案指定區域的鎖定。 參數 handler 是一個完成處理程序,當鎖定被取得(或操作失敗)時會被呼叫。 傳遞給完備處理程序的結果即為 FileLock。
此形式的 ch.lock(att,handler) 呼叫與呼叫完全相同
ch.{@link #lock(long,long,boolean,Object,CompletionHandler) lock}(0L, Long.MAX_VALUE, false, att, handler)
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
Lock(Int64, Int64, Boolean)
鎖定該頻道檔案的指定區域。
[Android.Runtime.Register("lock", "(JJZ)Ljava/util/concurrent/Future;", "GetLock_JJZHandler", ApiSince=26)]
public abstract Java.Util.Concurrent.IFuture? Lock(long position, long size, bool shared);
[<Android.Runtime.Register("lock", "(JJZ)Ljava/util/concurrent/Future;", "GetLock_JJZHandler", ApiSince=26)>]
abstract member Lock : int64 * int64 * bool -> Java.Util.Concurrent.IFuture
參數
- position
- Int64
鎖定區域起始的位置;必須是非負數
- size
- Int64
鎖定區域的大小;必須是非負的,且 position和 + size 必須非負
- shared
- Boolean
true 請求共用鎖,此時此通道必須開啟以供讀取(甚至可能寫入); false 請求獨佔鎖,此時此通道必須開放以寫入(甚至可能讀取)
傳回
一個 Future 代表待處理結果的物件
- 屬性
備註
鎖定該頻道檔案的指定區域。
此方法會啟動操作,以取得該通道檔案指定區域的鎖定。 此方法的行為與該 #lock(long, long, boolean, Object, CompletionHandler) 方法完全相同,不同的是,該方法回傳的是代表待處理結果的 a Future ,而非指定完成處理程序。
Future該Future#get() get方法在成功完成後回傳 。FileLock
Java 文件 java.nio.channels.AsynchronousFileChannel.lock(long, long, boolean)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
Lock(Int64, Int64, Boolean, Object, ICompletionHandler)
鎖定該頻道檔案的指定區域。
[Android.Runtime.Register("lock", "(JJZLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "GetLock_JJZLjava_lang_Object_Ljava_nio_channels_CompletionHandler_Handler", ApiSince=26)]
[Java.Interop.JavaTypeParameters(new System.String[] { "A" })]
public abstract void Lock(long position, long size, bool shared, Java.Lang.Object? attachment, Java.Nio.Channels.ICompletionHandler? handler);
[<Android.Runtime.Register("lock", "(JJZLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "GetLock_JJZLjava_lang_Object_Ljava_nio_channels_CompletionHandler_Handler", ApiSince=26)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "A" })>]
abstract member Lock : int64 * int64 * bool * Java.Lang.Object * Java.Nio.Channels.ICompletionHandler -> unit
參數
- position
- Int64
鎖定區域起始的位置;必須是非負數
- size
- Int64
鎖定區域的大小;必須是非負的,且 position和 + size 必須非負
- shared
- Boolean
true 請求共用鎖,此時此通道必須開啟以供讀取(甚至可能寫入); false 請求獨佔鎖,此時此通道必須開放以寫入(甚至可能讀取)
- attachment
- Object
要附加到 I/O 操作上的物件;可以是 null
- handler
- ICompletionHandler
處理者會處理結果
- 屬性
備註
鎖定該頻道檔案的指定區域。
此方法會啟動操作,以取得該通道檔案指定區域的鎖定。 參數 handler 是一個完成處理程序,當鎖定被取得(或操作失敗)時會被呼叫。 傳遞給完備處理程序的結果即為 FileLock。
由 和 position 參數指定的size區域不必包含於實際底層檔案內,甚至不必重疊。 閘區大小固定;如果一個鎖定區域最初包含檔案的末尾,且檔案超出該區域,那麼新檔案部分將不會被鎖定覆蓋。 如果檔案預期會變大,且需要對整個檔案進行鎖定,則應鎖定從零開始且不小於檔案預期最大大小的區域。 雙參數 #lock(Object,CompletionHandler) 方法簡單地鎖定一個大小 Long#MAX_VALUE為 的區域。 若該 Java 虛擬機已持有與請求區域重疊的鎖,或此方法被用於鎖定重疊區域且操作未完成,則此方法會拋OverlappingFileLockException出 。
有些作業系統不支援以非同步方式取得檔案鎖的機制。 因此,實作可能會在背景執行緒中取得檔案鎖,或是從相關執行緒池中執行的任務中取得。 若有許多未完成的鎖定操作,可能會在 Java 虛擬機器中無限期消耗執行緒。
部分作業系統不支援共享鎖,此時共享鎖的請求會自動轉換成專屬鎖的請求。 新取得的鎖是共享還是獨佔,可以透過調用所得鎖物件的方法 FileLock#isShared() isShared 來測試。
檔案鎖是代表整個 Java 虛擬機器持有的。 它們不適合在同一虛擬機器內控制多個執行緒對檔案的存取。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。