JavaTM 2 Platform
Standard Ed. 6

java.nio.channels
類別 FileLock

java.lang.Object
  繼承者 java.nio.channels.FileLock

public abstract class FileLock
extends Object

表示檔案區域鎖定的標記。

每次通過 FileChannel 類別的 locktryLock 方法獲取檔案上的鎖定時,就會創建一個檔案鎖定物件。

檔案鎖定物件最初是有效的。通過調用 release 方法、關閉用於獲取該鎖定的通道,或者終止 Java 虛擬機器(以先到者為準)來釋放鎖定之前,該物件一直是有效的。可通過調用鎖定的 isValid 方法來測試鎖定的有效性。

檔案鎖定要麼是獨佔的,要麼是共享的。共享鎖定可阻止其他共時運行的程序獲取重疊的獨佔鎖定,但是允許該程序獲取重疊的共享鎖定。獨佔鎖定則阻止其他程序獲取任一型別的重疊鎖定。一旦釋放某個鎖定後,它就不會再對其他程序所獲取的鎖定產生任何影響。

可通過調用某個鎖定的 isShared 方法來確定它是獨佔的還是共享的。某些平臺不支持共享鎖定,在這種情況下,對共享鎖定的請求被自動轉換為對獨佔鎖定的請求。

單個 Java 虛擬機器在某個特定檔案上所保持的鎖定是不重疊的。要測試某個候選鎖定範圍是否與現有鎖定重疊,可使用 overlaps 方法。

檔案鎖定物件記錄了在其檔案上保持鎖定的檔案通道、該鎖定的型別和有效性,以及鎖定區域的位置和大小。只有鎖定的有效性是隨時間而更改的;鎖定狀態的所有其他方面都是不可變的。

檔案鎖定以整個 Java 虛擬機器來保持。但它們不適用於控制同一虛擬機器內多個執行緒對檔案的存取。

多個共時執行緒可安全地使用檔案鎖定物件。

平臺依賴性

此檔案鎖定 API 直接映射到底層作業系統的本機鎖定設施。因此,無論程序是用何種語言編寫的,某個檔案上所保持的鎖定對於所有存取該檔案的程序來說都應該是可見的。

某個鎖定是否實際阻止另一個程序存取該鎖定區域的內容是與系統相關的,因此是未指定的。有些系統的本機檔案鎖定設施只是勸告的,意味著為了保證資料的完整性,各個程序必須遵守已知的鎖定協議。其他系統本機檔案鎖定是強制的,意味著如果某個程序鎖定了某個檔案區域,則實際上阻止其他程序以違反該鎖定的方式存取該區域。但在其他系統上,本機檔案鎖定是勸告的還是強制的可以以每個檔案為基礎進行配置。為確保平臺間的一致性和正確性,強烈建議將此 API 提供的鎖定作為勸告鎖定來使用。

在有些系統上,在某個檔案區域上獲取強制鎖定會阻止該區域被 java.nio.channels.FileChannel#map映射到記憶體,反之亦然。組合鎖定和映射的程序應該為此組合的失敗做好準備。

在有些系統上,關閉某個通道會釋放 Java 虛擬機器在底層檔案上所保持的所有鎖定,而不管該鎖定是通過該通道獲取的,還是通過同一檔案上打開的另一個通道獲取的。強烈建議在某個程序內使用唯一的通道來獲取任意給定檔案上的所有鎖定。

有些網路檔案系統僅在鎖定區域是頁對齊的並且是多個底層硬體的總的頁大小時,才允許檔案鎖定與記憶體映射檔案一起使用。有些網路檔案系統不對擴展超出某個位置(通常是 230 或 231)的區域實作檔案鎖定。通常,對駐留在網路檔案系統上的檔案進行鎖定時應該極其小心。

從以下版本開始:
1.4

建構子摘要
protected FileLock(FileChannel channel, long position, long size, boolean shared)
          初始化此類別的一個新實例。
 
方法摘要
 FileChannel channel()
          返回檔案通道,此鎖定保持在該通道的檔案上。
 boolean isShared()
          判斷此鎖定是否為共享的。
abstract  boolean isValid()
          判斷此鎖定是否有效。
 boolean overlaps(long position, long size)
          判斷此鎖定是否與給定的鎖定區域重疊。
 long position()
          返回檔案內鎖定區域中第一個位元組的位置。
abstract  void release()
          釋放此鎖定。
 long size()
          返回鎖定區域的大小,以位元組為單位。
 String toString()
          返回描述此鎖定的範圍、型別和有效性的字元串。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

FileLock

protected FileLock(FileChannel channel,
                   long position,
                   long size,
                   boolean shared)
初始化此類別的一個新實例。

參數:
channel - 檔案通道,此鎖定保持在該通道的檔案上
position - 檔案中的位置,鎖定區域從此位置開始;必須為非負數
size - 鎖定區域的大小;必須為非負數,並且 position + size 的和必須為非負數
shared - 如果此鎖定是共享的,則為 true,如果是獨佔的,則為 false
拋出:
IllegalArgumentException - 如果關於參數的前提不成立
方法詳細資訊

channel

public final FileChannel channel()
返回檔案通道,此鎖定保持在該通道的檔案上。

返回:
檔案通道

position

public final long position()
返回檔案內鎖定區域中第一個位元組的位置。

鎖定區域不必包含在實際的底層檔案中,甚至不必與其重疊,所以此方法返回的值可能超出檔案的當前大小。

返回:
位置

size

public final long size()
返回鎖定區域的大小,以位元組為單位。

鎖定區域不必包含在實際的底層檔案中,甚至不必與其重疊,所以此方法返回的值可能超出檔案的當前大小。

返回:
鎖定區域的大小

isShared

public final boolean isShared()
判斷此鎖定是否為共享的。

返回:
如果是共享的,則返回 true,如果是獨佔的,則返回 false

overlaps

public final boolean overlaps(long position,
                              long size)
判斷此鎖定是否與給定的鎖定區域重疊。

返回:
當且僅當此鎖定與給定的鎖定區域至少重疊一個位元組時才返回 true

isValid

public abstract boolean isValid()
判斷此鎖定是否有效。

在釋放鎖定物件或關閉與其關聯的檔案通道(以先到者為準)之前,該鎖定物件保持有效。

返回:
當且僅當此鎖定為有效時才返回 true

release

public abstract void release()
                      throws IOException
釋放此鎖定。

如果此鎖定物件是有效的,則調用此方法會釋放該鎖定並使該物件無效。如果此鎖定物件是無效的,則調用此方法無效。

拋出:
ClosedChannelException - 如果用於獲取此鎖定的通道不再處於打開狀態
IOException - 如果發生 I/O 錯誤

toString

public final String toString()
返回描述此鎖定的範圍、型別和有效性的字元串。

覆寫:
類別 Object 中的 toString
返回:
一個描述性的字元串

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only