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

会网站制作的职业是福建省建设行业信息公开平台

会网站制作的职业是,福建省建设行业信息公开平台,网页设计基础视频,推广专员是做什么的1、实现效果 当一个请求线程多次请求A方法时,只会触发一次A方法的实际调用,会将方法结果缓存起来,避免多次调用。 2、实现过程 1. 需要一个注解ThreadLocalCache,在需要缓存的方法上加上该注解 2. 需要一个切面,借助ThreadLocal,将结果缓存起来,利用环绕通知来实现方法拦截从…1、实现效果 当一个请求线程多次请求A方法时,只会触发一次A方法的实际调用,会将方法结果缓存起来,避免多次调用。 2、实现过程 1. 需要一个注解ThreadLocalCache,在需要缓存的方法上加上该注解 2. 需要一个切面,借助ThreadLocal,将结果缓存起来,利用环绕通知来实现方法拦截从缓存中返回方法执行结果 3、代码实现 3.1、ThreadLocalCache注解创建 作用于方法级别 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface ThreadLocalCache { }3.2、ThreadLocalTestAspect切面创建 Aspect Component public class ThreadLocalTestAspect {private ThreadLocalMapObject, Object threadLocal new ThreadLocal();Around(annotation(com.example.test.ThreadLocalCache))private Object myPointcut(ProceedingJoinPoint proceedingJoinPoint) {//获取方法的入参Object[] args proceedingJoinPoint.getArgs();Signature signature proceedingJoinPoint.getSignature();//获取目标方法名String name signature.getName();//获取目标方法的类的完全限定名String declaringTypeName signature.getDeclaringTypeName();//生成缓存keyObject key SimpleKeyGenerator.generateKey(args, declaringTypeName, name);if (Objects.isNull(threadLocal.get())) {threadLocal.set(new HashMap(8));}try {if (!threadLocal.get().containsKey(key)) {threadLocal.get().put(key, proceedingJoinPoint.proceed());}} catch (Throwable e) {//日志记录e.printStackTrace();}return threadLocal.get().get(key);}public void removeThreadLocal(){threadLocal.remove();}}4、测试过程 创建一个接口及实现 public interface ThreadLocalTestService {Long getParentIdByName(String name); }Service public class ThreadLocalTestServiceImpl implements ThreadLocalTestService{ThreadLocalCacheOverridepublic Long getParentIdByName(String name) {//根据name查询父级IDSystem.out.println(com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了);return 666L;} }方法调用 RestController RequestMapping(/ThreadLocalTest) public class ThreadLocalTest {Autowiredprivate ThreadLocalTestService threadLocalTestService;Autowiredprivate ThreadLocalTestAspect threadLocalTestAspect;GetMapping(getParentIdByName)public Long getParentIdByName(String name){System.out.println(Thread.currentThread().getName());threadLocalTestService.getParentIdByName(name);threadLocalTestService.getParentIdByName(name);Long parentId threadLocalTestService.getParentIdByName(name);threadLocalTestAspect.removeThreadLocal();return parentId;}}3.执行结果 http-nio-8087-exec-1 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-2 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-4 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-5 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-6 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-7 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-8 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-10 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-9 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-3 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-1 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-2 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了http-nio-8087-exec-是线程名字,可以看到http-nio-8087-exec-1执行了两次,每次都调用四次getParentIdByName 方法,但getParentIdByName 方法实际至执行了一次,剩下的三次是从缓存中获取的。 这里需要注意的是:线程每次结束的时候都需要调用threadLocalTestAspect.removeThreadLocal();为的是把当前线程threadLocal里的缓存抹掉,因为同一个线程可能会被重复使用,所以不抹掉,可能会导致多次请求使用同一个线程,目标方法只会执行一次,和我们的最初的实现效果是违背的。 下面是不调用threadLocalTestAspect.removeThreadLocal();的执行结果 http-nio-8087-exec-1 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-3 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-8 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-5 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-6 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-7 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-4 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-9 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-10 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-2 com.example.test.ThreadLocalTestServiceImpl.getParentIdByName 执行了 http-nio-8087-exec-1 http-nio-8087-exec-3 http-nio-8087-exec-8 http-nio-8087-exec-5可以很清楚的看到http-nio-8087-exec-1、3、5、8再次请求的时候getParentIdByName 方法并没有执行了,因为之前的threadlocal缓存没有被remove导致的。
http://www.hkea.cn/news/14356404/

相关文章:

  • 网站名称怎么起百度直播
  • 网站开发需要多少钱怎样我要在附近找工作
  • 如何给自己开发的网站加域名免费网站在哪下载
  • 贵阳网站建设专家宝安做网站的
  • 在网上怎么建立自己的网站桐城市做网站
  • 门店做网站有没有必要百度seo排名帝搜软件
  • 中小企业网站该怎么做马鞍山网站建设设计
  • 环保网站可以做哪些内容Wordpress网站仿站
  • 网站产品页面wordpress 社交帐号登录
  • 至设计网站手机应用下载网站源码
  • 免费ai设计logo网站皓丽智能会议平板官网
  • 无锡网站建设软件开发群晖 wordpress 配置文件
  • 现在怎么做网站如何做网站建设业务员
  • 注册网站获取网易邮箱安全码wordpress本地环境迁移
  • 云酒店网站建设网建会
  • 毕设用别人网站做原型jq插件网站
  • 做网站公司599有名的wordpress主题商
  • 哪些网站的活动策划做的好wordpress外观选单分类添加不
  • 门户型网站模板杭州高端网站建设公司哪家好
  • 网站开发服务的协议对电子政务做技术支持的网站
  • 福田区建设局网站wordpress 点赞数量翻倍
  • 缩短链接的网站做企业平台网站成本
  • 做网站的公司应该做收录嘛微信小程序做直播网站
  • 网站开发书的案例北京网络营销公司网页
  • 绵竹移动网站建设网站建设开题报告设计
  • 长沙网站seo公司国外外贸平台
  • 购物网站后台管理模板淘宝客商品推广网站建设
  • 网站平台推广方案东莞好的网站国外站建设价格
  • wordpress响应式主板成都网站快速优化排名
  • 建设音乐主题网站海口网站建设好