当前位置: 首页 > news >正文

杭州网站网站建设医疗培训网站建设

杭州网站网站建设,医疗培训网站建设,做自己任务的网站,苏州免费模板建站目录 使用注解定义分布式锁 Aop例子 retention 表示在什么时候可以用,runtime表示在运行期可以用 target表示可以用在哪些上面 inherited表示可以被继承 切点和切面类 重点是 pjp.proceed(args) 这个就是执行目标方法,下面的这一段没啥意思 也可…

目录

使用注解定义分布式锁 


Aop例子

retention 表示在什么时候可以用,runtime表示在运行期可以用

target表示可以用在哪些上面  inherited表示可以被继承  

 切点和切面类

重点是 pjp.proceed(args) 这个就是执行目标方法,下面的这一段没啥意思

也可以直接把注解写在切面注解上,但是注解名必须写在方法的参数上,保持一致

使用注解定义分布式锁 

package com.tianji.promotion.utils;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyLock {String name();long waitTime() default 1;long leaseTime() default -1;TimeUnit unit() default TimeUnit.SECONDS;
}

没有传过期时间,默认是-1  过期时间是30秒,传了过期时间 看门狗会失效

如何保证先获取锁然后事务在执行呢,事务本身的顺序就是很靠后的如果确实不放心可以实现order方法 ,order越小 优先级越高

但是这个锁类型是写死的,如何根据传入锁类型参数的不同生成不同的锁对象呢?

锁类型的枚举
public enum MyLockType {RE_ENTRANT_LOCK, // 可重入锁FAIR_LOCK, // 公平锁READ_LOCK, // 读锁WRITE_LOCK, // 写锁;
}

 

 redission不同锁类型的工厂

工厂模式,根据参数不同获取不同的对象,function是方法引用,apply就是去执行他具体的方法

里面使用了一个枚举map,比hashmap效率高一些

package com.tianji.promotion.utils;import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;import java.util.EnumMap;
import java.util.Map;
import java.util.function.Function;import static com.tianji.promotion.utils.MyLockType.*;@Component
public class MyLockFactory {private final Map<MyLockType, Function<String, RLock>> lockHandlers;public MyLockFactory(RedissonClient redissonClient) {this.lockHandlers = new EnumMap<>(MyLockType.class);this.lockHandlers.put(RE_ENTRANT_LOCK, redissonClient::getLock);this.lockHandlers.put(FAIR_LOCK, redissonClient::getFairLock);this.lockHandlers.put(READ_LOCK, name -> redissonClient.getReadWriteLock(name).readLock());this.lockHandlers.put(WRITE_LOCK, name -> redissonClient.getReadWriteLock(name).writeLock());}public RLock getLock(MyLockType lockType, String name){return lockHandlers.get(lockType).apply(name);}
}

 如果看不懂 ,可以不用 拉姆达表达式,获取的时候还是apply方法

 

锁失败策略

多线程争抢锁,大部分线程会获取锁失败,而失败后的处理方案和策略是多种多样的。目前,我们获取锁失败后就是直接抛出异常,没有其它策略,这与实际需求不一定相符。

 

策略模式

根据不同的策略选择使用不同的策略 ,,工厂模式是生成不同的对象 

http://www.yayakq.cn/news/96807/

相关文章:

  • 广州建设网站怎么做如何开发微信小程序开发
  • 建网站要服务器网站开发+搜索
  • 北京学习网站建设南昌外贸网站建设
  • 如何在淘宝上做自己的网站手机免费建网站
  • 学编程好找工作吗?泉州关键词优化推广
  • 在淘宝上做代销哪个网站好怎么开个人工作室
  • 网站赚钱平台优区生活app官方下载
  • 两学一做专题教育网站网页设计与制作背景图片
  • 腾讯空间个人认证 企业认证 网站认证哪种功能用途最齐全??大蒜做营销型网站
  • 上线了自助建站公司做网站费用计入什么科目
  • 森东网站建设深圳设计周
  • 南通网站建设排名网易云音乐网页版
  • 心理咨询网站如何构建个人网站
  • 做外贸哪个网站最容易上手天津网站开发平台
  • seo优化外包公司seo快排优化
  • phpmysql网站开发技术什么网站做app好
  • 机械网站建设价格国家企业信息系统公示系统下载
  • dw软件网站建设教程视频站酷设计网站首页
  • 营销型网站的特点企业域名注册费用
  • 无锡百度网站排名seodao cn
  • 深圳网站制作可选兴田德润衡阳房产网
  • 专业做淘宝网站绍兴dede视频网站模板
  • 黄山网站建设怎么做楼盘网站建设方案ppt
  • 做淘宝导购网站整站优化费用
  • 做外贸网站的价格无锡工程建设中心网站
  • 在线设计海报的网站ui设计做兼职的网站有哪些
  • 怎样申请网站空间wordpress撰写
  • 整站排名优化公司企业手机网页设计
  • 网站集约化建设的目的黄页网大全免费软件
  • 元隆盛建设集团有限公司网站wdcp wordpress伪静态