public abstract class FileLock extends Object implements AutoCloseable
文件加锁对象每次获取一个锁上的文件通过一个班的FileChannel
lock
或tryLock
方法创建的,或lock
或tryLock
方法的AsynchronousFileChannel
类。
一个文件锁定对象最初是有效的。它一直有效,直到锁是通过调用release
方法发布,通过关闭通道,是用来获取它,或由java虚拟机终止,以先发生者为准。一把锁的有效性可以通过调用其isValid
法测试。
文件锁是独家或共享。一个共享锁防止其他并发运行程序从获得一个重叠的互斥锁,但确实允许他们获得重叠的共享锁。一个互斥锁阻止其他程序从任一类型的一个重叠的锁中获得。一旦它被释放,一个锁没有进一步的影响,可能是由其他程序收购的锁。
无论是专用或共享锁可以通过调用其isShared
法测定。一些平台不支持共享锁,在这种情况下,共享锁的请求会自动转换为互斥锁的请求。
持有的锁在一个特定的文件由一个单一的java虚拟机不重叠。的overlaps
方法可以用来测试一个候选人是否锁定范围覆盖现有的锁。
一个文件锁对象记录该锁的文件的文件通道,锁的类型和有效性,以及锁定区域的位置和大小。只有锁定的有效性随着时间的推移而变化,锁的状态的所有其他方面都是不可变的。
文件锁在整个java虚拟机举行代表。它们不适合在同一个虚拟机中的多个线程控制对一个文件的访问。
此文件锁定的文件锁的目的是直接映射到底层操作系统的本地锁定设施。因此,在一个文件上持有的锁应该是可见的所有程序访问该文件,无论语言,这些程序是书面的。
是否一个锁实际上阻止另一个程序访问锁定区域的内容是系统依赖,因此未指定。本地文件锁定设备的一些系统仅仅咨询的,意义,程序必须配合观察已知的锁定协议,以保证数据的完整性。在其他系统中本地文件锁强制性的,意思就是如果一个程序锁的文件然后其他程序实际上是防止的一种方式,将违反锁访问该地区。在另一个系统中,是否以每个文件的基础上的本地文件锁是否是咨询的或强制的。为了确保跨平台的一致性和正确的行为,强烈建议使用此接口提供的锁,如他们是咨询锁。
在一些系统中,获取有关文件区域强制锁防止mapped into memory
区域,反之亦然。结合锁定和映射的程序应该为这种组合而准备失败。
在一些系统中,关闭通道,释放所有的锁在底层文件的java虚拟机举行不管锁是通过那个渠道或通过其他渠道打开同一文件的获取。它强烈建议,在一个程序中,一个唯一的通道被用来获取所有的锁在任何给定的文件。
一些网络文件系统允许文件锁可以使用内存映射文件只有当锁定区域的页对齐和整个多底层硬件的页面大小。一些网络文件系统不能实现对区域延伸过去的某个位置的文件锁,经常2三十或2三十一。在一般情况下,要特别注意当锁定文件驻留在网络文件系统。
Modifier | Constructor and Description |
---|---|
protected |
FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
初始化该类的一个新实例。
|
protected |
FileLock(FileChannel channel, long position, long size, boolean shared)
初始化该类的一个新实例。
|
Modifier and Type | Method and Description |
---|---|
Channel |
acquiredBy()
返回该锁被获取的文件的通道。
|
FileChannel |
channel()
返回获取该锁的文件的文件通道。
|
void |
close()
此方法调用
release() 方法。
|
boolean |
isShared()
告诉是否该锁共享。
|
abstract boolean |
isValid()
告诉是否该锁是否有效。
|
boolean |
overlaps(long position, long size)
告诉是否该锁与给定的锁定范围重叠。
|
long |
position()
返回锁定区域的第一个字节的文件中的位置。
|
abstract void |
release()
释放这个锁。
|
long |
size()
返回以字节为单位的锁定区域的大小。
|
String |
toString()
返回一个字符串,描述该锁的范围、类型和有效性。
|
protected FileLock(FileChannel channel, long position, long size, boolean shared)
channel
-文件通道上的文件被锁定
position
在文件的锁定区域开始位置;必须是非负数
size
-锁定区域的大小;必须是非负的,和
position +
size必须非负
shared
-
true如果锁是共享的,如果它是唯一的
false
IllegalArgumentException
-如果在参数的前提条件不成立
protected FileLock(AsynchronousFileChannel channel, long position, long size, boolean shared)
channel
-通道在其文件被锁定
position
在文件的锁定区域开始位置;必须是非负数
size
-锁定区域的大小;必须是非负的,和
position +
size必须非负
shared
-
true如果锁是共享的,如果它是唯一的
false
IllegalArgumentException
-如果在参数的前提条件不成立
public final FileChannel channel()
该方法已被acquiredBy
法取代。
null
如果文件锁不是由文件的渠道获得。
public Channel acquiredBy()
public final long position()
一个锁定的区域不需要包含在内部,甚至是重叠的,实际的底层文件,所以这个方法返回的值可能会超过文件的当前大小。
public final long size()
一个锁定的区域不需要包含在内部,甚至是重叠的,实际的底层文件,所以这个方法返回的值可能会超过文件的当前大小。
public final boolean isShared()
public final boolean overlaps(long position, long size)
position
-锁范围的起始位置
size
-锁定范围的大小
public abstract boolean isValid()
锁定对象保持有效,直到它被释放或相关的文件通道关闭,以先到为准。
public abstract void release() throws IOException
如果这个锁定对象是有效的,那么调用此方法将释放锁并渲染对象无效。如果这个锁定对象无效,则调用此方法没有任何效果。
ClosedChannelException
如果通道被用来获得这个锁不再开
IOException
如果I/O错误发生
public final void close() throws IOException
release()
方法。它被添加到类中,以便它可以与自动资源管理块构造一起使用。
close
接口
AutoCloseable
IOException
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.