社区
Java EE
帖子详情
java如何锁住一个方法?
wsxqaz
2011-11-14 01:34:09
比如多个线程会写log,但是只有一个log文件,这样文件句柄会被多个线程打开,这个不是我想看到的,现在只有一个方法可以写log文件(比如:void Log(String msg)),如果锁住这个方法每次只有一个线程可以写,其他线程只能等待写完后才能抢到锁?
还有一个问题,java里的锁能被自己递归获得么?比如有一个方法递归调用自己,而这个方法是线程安全的进入后会加锁这样会死锁么?
...全文
357
3
打赏
收藏
java如何锁住一个方法?
比如多个线程会写log,但是只有一个log文件,这样文件句柄会被多个线程打开,这个不是我想看到的,现在只有一个方法可以写log文件(比如:void Log(String msg)),如果锁住这个方法每次只有一个线程可以写,其他线程只能等待写完后才能抢到锁? 还有一个问题,java里的锁能被自己递归获得么?比如有一个方法递归调用自己,而这个方法是线程安全的进入后会加锁这样会死锁么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
若鱼1919
2011-11-14
打赏
举报
回复
(1)
void Log(String msg){
synchronized(this.getClass()){
写文件
}
}
(2)这叫锁的可重入性,同一个线程可以在保持锁不释放的前提下,再次获得此锁。
jc8futao
2011-11-14
打赏
举报
回复
应该用一个log类将写文件的操作封装,然后用synchronized方法来实现具体的写文件。这样只有一个线程可以真正的写文件。不过这样做效率很低,建议用缓存将要写的内容分批的写入~!
阳明 to life
2011-11-14
打赏
举报
回复
NIO的文件锁 有写锁和读锁
锁是相对线程而言的 递归在一个线程中 没有和自己抢占资源 死锁的概念
Java
锁 到底锁的是哪个对象?
一段synchronized的代码被
一个
线程执行之前,他要先拿到执行这段代码的权限,在
java
里边就是拿到某个同步对象的锁(
一个
对象只有一把锁);如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了...
java
对象锁和类锁的区别
2.当
一个
类中有多个synchronized修饰的同步
方法
时,其中
一个
方法
被线程访问持有锁,其他
方法
同样被
锁住
,其他线程依然不能访问其他同步
方法
,因为此时
锁住
的是该类的对象,相当于整个对象
锁住
了。 3.
一个
类只能有一...
java
多线程中,对同
一个
类的静态
方法
加锁后,调用该
方法
,其他
方法
的调用会受到影响吗?
对象锁与类锁从
一个
问题说起对象锁与类锁synchronized ...
java
中每
一个
对象都持有一把锁–monitor,monitor在操作系统中被称为管程,也可翻译为监视器,
java
中的monitor其实是对操作系统中monitor...
java
对
一个
对象加锁,锁的是什么东西?
理论上:锁对象只要对于当前同时执行的现成来说是同
一个
对象即可。 锁对象用任意唯一的对象好不好呢? 不好,会影响其他无关线程的执行。 锁对象的规范要求 规范上:建议使用共享资源作为锁对象。 对于实例
方法
...
Java
方法
锁、对象锁、类锁
对于对象锁,是针对
一个
对象的,它只在该对象的某个内存位置声明
一个
标志位标识该对象是否拥有锁,所以它只会
锁住
当前的对象。一般
一个
对象锁是对
一个
非静态成员变量进行syncronized修饰,或者对
一个
非静态
方法
...
Java EE
67,549
社区成员
225,860
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章