当前位置: 首页 > 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.dnsts.com.cn/news/174305.html

相关文章:

  • 沛县网站设计宣传册样式
  • 网站飘窗建设合同网站优化检测
  • 网站活动模板中国企业网址大全
  • 北京网站制作长沙免费咨询图片带字
  • 企业网站seo贵不贵怎么做网站内容添加
  • 企业网站建设介绍铂爵旅拍婚纱摄影官网
  • ps做网站效果图尺寸如何跨境电商出口平台有哪些?
  • 常州网站设计平台wordpress在线仿站
  • 高校网站首页设计网站排名易下拉效率
  • 建设网站的收费徐州设计公司有哪些
  • 网站域名备案注册证书查询a站为什么会凉
  • 财经网站源码 织梦站长平台链接提交
  • 凡科网站产品导航怎么做我需要一个网站
  • 做搜狗网站优百度指数分析
  • 汕头网站建设哪家好用jsp做网站需要的知识
  • 企业做网站要注意些什么有没有什么网站免费做名片
  • 深圳有做网站最近价格?企业网站建设要多少钱
  • 企业网站怎么做连接郑州网站开发培训班
  • 90后做网站赚了做英文网站哪家好
  • 哪个网站可以免费建站网站logo怎么做才清晰
  • 鲤城区建设局网站网站备案和空间备案
  • php网站开发专业是做什么的百度认证服务平台
  • 怎么免费建立自己的网站微网站 留言板
  • 女装网站功能的建设模板下载免费网站
  • 亿唐微方网站建设wordpress禁用更新提示
  • 建立个人网站的步骤有哪些做淘客的网站名称
  • 网站制作字怎么放在图上面河南工程建设信息网站
  • 小学网站建设及使用平面设计培训学校一年学费
  • 微信属于营销型网站建设手机网站培训教程
  • 新手做网站详细步骤盐城网站建设案例