对象锁
来源:互联网 发布:高晓松 三国 知乎 编辑:程序博客网 时间:2024/06/05 15:30
public class User implements Serializable{public static final String USER_LOCK = "User_Lock_";/** * 获取对象锁,每个用户在缓存中有一个锁 * * @param userId * 用户id * @return ReentrantLock 锁 */private static ReentrantLock getLock(long userId) {ReentrantLock lock = (ReentrantLock) Cache.get(USER_LOCK + userId);if (lock == null) {synchronized (User.class) { // 单例,一个用户,一个锁lock = (ReentrantLock) Cache.get(USER_LOCK + userId);if (lock == null) {lock = new ReentrantLock();Cache.set(USER_LOCK + userId, lock);}}}return lock;}/** * 加锁 * * @param userId */public static void addLock(long userId) {getLock(userId).lock();}/** * 解锁 * * @param userId */public static void deleteLock(long userId) {ReentrantLock lock = getLock(userId);if (lock == null) {return;}if (lock.isHeldByCurrentThread()) {lock.unlock();}} /** * 清除锁缓存 */ public static void cleanCacheLock(String userId) { ReentrantLock lock = (ReentrantLock) Cache.get(USER_LOCK + userId); if (lock == null) { return; } if (lock.isHeldByCurrentThread()) { lock.unlock(); } if (!lock.hasQueuedThreads()) { Cache.delete(USER_LOCK + userId); } } public void updateSignWithLock(long userId) {if (userId == 0) {Logger.info("加锁:userId等于0");return ;}User.addLock(userId); //加锁try {doUser();} finally {User.deleteLock(userId); //解锁}}}
0 0
- 对象和对象锁
- 对象锁
- 对象锁
- 对象锁:传递对象锁
- java的对象锁和对象传递
- JAVA--多线程同步,锁对象,条件对象
- 查询锁表对象
- java对象锁
- 锁对象设置
- java对象锁&类锁
- “类锁”和对象锁
- C++对象锁模版
- java 对象锁示例
- Java 对象锁
- 理解synchronized对象锁
- 哪个对象才是锁?
- java 对象锁
- SAP锁对象
- 关于surfaceview的使用
- 停止在做的16件事
- Kinect for Unity V2 代码示例(一)
- java串口通讯实例
- [汇编语言学习笔记][第三章寄存器(内存访问)]
- 对象锁
- 仅180人的“屌丝公司”为什么做到年收150亿?
- 20160419运行apache2.4 丢失VCRUNTIME140.DLL的解决办法
- 继承AppCompatActivity取消标题栏的问题
- Laravel5.2中使用xheditor编辑器实现上传图片功能
- Kinect for Unity V2 代码示例(二)
- 数据结构绪论
- 威锋十年:叫一声「果粉」,你还敢答应吗?
- HDU 1253 胜利大逃亡 (BFS)