你需要一种非阻塞式的锁。javautilcocurrent包中的ReentrantReadWriteLock就提供了可重入的读写锁机制。
final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); //读写锁public boolean read() {
//尝试获取读锁
if (rwlreadLock()tryLock()){
//读资源
return true;
} else { //获取读锁失败
return false; //立即返回
}
}
public boolean write() {
//尝试获取写锁
if (rwlwriteLock()tryLock()) {
//写资源
return true;
} else { //获取写锁失败
return false; //立即返回
}
}
在java中,synchronized就是非公平锁,它无法保证等待的线程获取锁的顺序。
关于非公平锁
非公平锁即无法保证锁的获取是按照请求锁的顺序进行的。这样就可能导致某个或者一些线程永远获取不到锁。
对象锁&类锁 对象锁 当一个对象中有synchronized method或synchronized block的时候调用此对象的同步方法或进入其同步区域时,就必须先获得对象锁。如果此对象的对象锁已被其他调用者占用,则需要等待此锁被释放 同步静态方法/静态变量互斥体 由
以上就是关于synchronized 加在java方法前面是什么作用全部的内容,包括:synchronized 加在java方法前面是什么作用、java 如果判断一个对象被其它线程读或写锁定如果锁定则所在方法return、java 如何判断一个对象被其它线程读或写锁定如果锁定则所在方法return等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)