volatile关键字保证不了线程安全 想要线程安全必须保证原子性,可见性,有序性。而volatile只能保证可见性和有序性 总线锁 缓存一致性协议 我写入之后发现这是共享变量就使得其他cpu缓存了的值失效,让它再次去内存中读取。 这样如果有一个变量i = 0用volatile修饰,两个线程对其进行i++操作,如果线程1从内存中读取i=0进了缓存,然后把数据读入寄存器,之后时间片用完了,然后线程2也从内存中读取i进缓存,因为线程1还未执行写操作,内存屏障是插入在写操作之后的指令,意味着还未触发这个指令,所以缓存行是不会失效的。然后线程2执行完毕,内存中i=1,然后线程1又开始执行,然后将数据写回缓存再写回内存,结果还是1。 https://blog.csdn.net/qq_33330687/article/details/80990729 |
Filter是Spring过滤器,要定义一个Filter类有以下步骤: 首先定义一个Filter类,继承javax.servlet.Filter类,重写其init、doFilter、destroy方法。init()方法会在Filter初始化后进行调用,在init()方法里面我们可以通过FilterConfig访问到初始化参数( getInitParameter()或getInitParameters() )、ServletContext (getServletContext)和当前Filter部署的名称( getFilterName() )等信息。destroy()方法将在Filter被销毁之前调用。而doFilter()方法则是真正进行过滤处理的方法,在doFilter()方法内部,我们可以过滤请求的request和返回的response,同时我们还可以利用FilterChain把当前的request和response传递给下一个过滤器或Servlet进行处理。 同时配置过滤器和拦截器然后请求,结果如下: init yes filter test interceptortest pre controller interceptortest post interceptortest after 可以看到filter优先于interceptor被调用。 过滤器和拦截器主要区别如下: 1.二者适用范围不同。Filter是Servlet规范规定的,只能用于Web程序中,而拦截器既可以用于Web程序,也可以用于Application、Swing程序中。 2.规范不同。Filter是在Servlet规范定义的,是Servlet容器支持的,而拦截器是在Spring容器内的,是Spring框架支持的。 3.使用的资源不同。同其他代码块一样,拦截器也是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源、对象(各种bean),而Filter不行。 4.深度不同。Filter只在Servlet前后起作用,而拦截器能够深入到方法前后、异常跑出前后等,拦截器的使用有更大的弹性。 |
本帖最后由 java 于 2019-4-19 19:47 编辑 Spring注解
SpringBoot注解
链接:https://www.jianshu.com/p/13de8e13173c |
本帖最后由 java 于 2019-4-19 19:21 编辑 ArrayList、Vector和LinkedList 首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:
线程安全 数组和链表 空间增长率 访问读写速度 |
|Archiver|手机版|小黑屋|firemail
( 粤ICP备15085507号-1 )
GMT+8, 2025-5-20 21:37 , Processed in 0.067674 second(s), 23 queries .
Powered by Discuz! X3
© 2001-2013 Comsenz Inc.