导航:首页 > 编程语言 > java方法加锁

java方法加锁

发布时间:2025-01-02 08:20:48

1. java中文件加锁机制是怎么实现的。

Java中文件加锁机制如下:
在对文件操作过程中,有时候需要对文件进行加锁操作,防止其他线程访问该文件。对文件的加锁方法有两种:
第一种方法:使用RandomAccessFile类操作文件。
在java.io.RandomAccessFile类的open方法,提供了参数实现独占的方式打开文件:
RandomAccessFile raf = new RandomAccessFile(file, "rws");
其中的“rws”参数,rw代表读取和写入,s代表了同步方式,也就是同步锁。这种方式打开的文件,就是独占方式的。

第二种方法:使用sun.nio.FileChannel对文件进行加锁。
代码:
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
FileChannel fc = raf.getChannel();
FileLock fl = fc.tryLock();
if(fl.isValid())
System.out.println("You have got the file lock.");

以上是通过RandomAccessFile来获得文件锁的,方法如下:
代码:
FileOutputStream fos = new FileOutputStream("file.txt");
FileChannel fc = fos.getChannel(); //获取FileChannel对象
FileLock fl = fc.tryLock(); //or fc.lock();
if(null != fl)
System.out.println("You have got file lock.");
//TODO write content to file
//TODO write end, should release this lock
fl.release(); //释放文件锁
fos.close; //关闭文件写操作

如果在读文件操作的时候,对文件进行加锁,操作过程如下:
FileChannel也可以从FileInputStream中直接获得,但是这种直接获得FileChannel的对象直接去操作FileLock会报异常NonWritableChannelException,需要自己去实现getChannel方法,代码如下:
private static FileChannel getChannel(FileInputStream fin, FileDescriptor fd) {
FileChannel channel = null;
synchronized(fin){
channel = FileChannelImpl.open(fd, true, true, fin);
return channel;
}
}

其实,看FileInputStream时,发现getChannel方法与我们写的代码只有一个地方不同,即open方法的第三个参数不同,如果设置为false,就不能锁住文件了。缺省的getChannel方法,就是false,因此,不能锁住文件。

2. java是不是同步方法会自动加this锁,静态同步代码(名字可能不对)会自动加“名.class”锁

//看注释!
classTestLock
{
//非静态方法,默认锁是this
synchronizedvoidshow1()
{

}
//非静态方法,如果方法没有锁,里面同步代码块!
voidshow2()
{
//这里可以填写this,填什么都可以,只要是唯一,对象,类,都可以!
synchronized(this)
{
//这个同步代码块,如果不和上面方法进行同锁,填什么都可以,包括class文件都可以
//但是为了和上面方法同步的话,就必须this了,因为方法的锁此刻默认就是this!
}
} //静态方法看这里!
staticsynchronizedvoidmethod1()
{
//注意这个同步方法的锁,这会默认就不在是this了,而是(TestLock.class)了;
}
//静态同步代码块!
staticvoidmethod2()
{
synchronized(TestLock.class)
{
//这里建议这么写,该方法所属的class文件,当然,写其他类的字节码文件也是可以的!
//但是这里绝对不可以this
//如果和该上买呢静态方法同步的话,必须TestLock.class
}
}
}

阅读全文

与java方法加锁相关的资料

热点内容
三星升级android60 浏览:290
粘土的压缩模量 浏览:113
美国程序员生活 浏览:219
51单片机摘要 浏览:403
英语经典pdf下载 浏览:315
大学文件夹怎么删除 浏览:666
linux科研软件 浏览:551
ue4打包编译着色器 浏览:773
云服务器可以在手机上登录吗 浏览:674
网游脚本为什么要连接服务器 浏览:5
程序员发展路线图 浏览:318
手机语音加密会议 浏览:588
冰与火pdf 浏览:417
为什么叫我买阿里云服务器 浏览:473
加密货币征税一览表 浏览:962
llc编译器 浏览:925
数控可编程电阻器 浏览:760
培训app源码 浏览:434
phpcurl启用 浏览:536
ubuntu图形编程 浏览:442