社区
Java EE
帖子详情
java如何锁住一个方法?
wsxqaz
2011-11-14 01:34:09
比如多个线程会写log,但是只有一个log文件,这样文件句柄会被多个线程打开,这个不是我想看到的,现在只有一个方法可以写log文件(比如:void Log(String msg)),如果锁住这个方法每次只有一个线程可以写,其他线程只能等待写完后才能抢到锁?
还有一个问题,java里的锁能被自己递归获得么?比如有一个方法递归调用自己,而这个方法是线程安全的进入后会加锁这样会死锁么?
...全文
355
3
打赏
收藏
java如何锁住一个方法?
比如多个线程会写log,但是只有一个log文件,这样文件句柄会被多个线程打开,这个不是我想看到的,现在只有一个方法可以写log文件(比如:void Log(String msg)),如果锁住这个方法每次只有一个线程可以写,其他线程只能等待写完后才能抢到锁? 还有一个问题,java里的锁能被自己递归获得么?比如有一个方法递归调用自己,而这个方法是线程安全的进入后会加锁这样会死锁么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
之路
你了解
Java
吗?你知道
Java
能做什么吗?你知道
Java
该怎么学吗?你知道
Java
未来的发展趋势、发展状况吗?
java
多线程中,对同一个类的静态
方法
加
锁
后,调用该
方法
,其他
方法
的调用会受到影响吗?
对象
锁
与类
锁
从一个问题说起对象
锁
与类
锁
synchronized 从一个问题说起 一直想要把一些学习历程和感悟记录下来,但是未曾静下心来好好思索一下,今天,就从朋友问到的一个问题开始,静态
方法
加
锁
后,其他
方法
会受影响吗? 对象
锁
与类
锁
java
中每一个对象都持有一把
锁
–monitor,monitor在操作系统中被称为管程,也可翻译为监视器,
java
中的monitor其实是对操作系统中monitor...
java
对一个对象加
锁
,
锁
的是什么东西?
线程同步相关知识详解。 一、同步代码块 作用:把出现线程安全问题的核心代码给上
锁
原理:每次只能一个线程进入,执行完毕后自动解决,其他线程才可以进来执行。 synchronized(同步
锁
对象) { 操作共享资源的代码(核心代码) }
锁
对象要求 理论上:
锁
对象只要对于当前同时执行的现成来说是同一个对象即可。
锁
对象用任意唯一的对象好不好呢? 不好,会影响其他无关线程的执行。
锁
对象的规范要求 规范上:建议使用共享资源作为
锁
对象。 对于实例
方法
建议使用this作为
锁
对象。
java
对象
锁
和类
锁
的区别
1.一个类可以有多个对象,所以一个类可以有多个对象
锁
。 2.当一个类中有多个synchronized修饰的同步
方法
时,其中一个
方法
被线程访问持有
锁
,其他
方法
同样被
锁
住
,其他线程依然不能访问其他同步
方法
,因为此时
锁
住
的是该类的对象,相当于整个对象
锁
住
了。 3.一个类只能有一个.claas,所有一个类只能有一个类
锁
。首先的明白
java
中
锁
的机制 synchronized 在修饰代码块的时候需
Java
方法
锁
、对象
锁
、类
锁
首先介绍一下对象
锁
(也叫
方法
锁
)与类
锁
有那些不同。下文中使用对象
锁
称呼代替
方法
锁
。 对于对象
锁
,是针对一个对象的,它只在该对象的某个内存位置声明一个标志位标识该对象是否拥有
锁
,所以它只会
锁
住
当前的对象。一般一个对象
锁
是对一个非静态成员变量进行syncronized修饰,或者对一个非静态
方法
进行syncronized修饰。对于对象
锁
,不同对象访问同一个被syncronized修饰的
方法
的时
Java EE
67,515
社区成员
225,878
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章