首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java怎么锁住一个方法

2012-01-22 
java如何锁住一个方法?比如多个线程会写log,但是只有一个log文件,这样文件句柄会被多个线程打开,这个不是

java如何锁住一个方法?
比如多个线程会写log,但是只有一个log文件,这样文件句柄会被多个线程打开,这个不是我想看到的,现在只有一个方法可以写log文件(比如:void Log(String msg)),如果锁住这个方法每次只有一个线程可以写,其他线程只能等待写完后才能抢到锁?

还有一个问题,java里的锁能被自己递归获得么?比如有一个方法递归调用自己,而这个方法是线程安全的进入后会加锁这样会死锁么?

[解决办法]
NIO的文件锁 有写锁和读锁

锁是相对线程而言的 递归在一个线程中 没有和自己抢占资源 死锁的概念
[解决办法]
应该用一个log类将写文件的操作封装,然后用synchronized方法来实现具体的写文件。这样只有一个线程可以真正的写文件。不过这样做效率很低,建议用缓存将要写的内容分批的写入~!
[解决办法]
(1)
void Log(String msg){
synchronized(this.getClass()){
写文件
}
}
(2)这叫锁的可重入性,同一个线程可以在保持锁不释放的前提下,再次获得此锁。

热点排行