zoukankan      html  css  js  c++  java
  • java后端处理高并发

    一个登陆页面可能会被很多账户同时登陆或者注册,那么我们就好处理这些并发,否则降低程序的使用率,甚至程序奔溃,下面一段代码处理程序的高并发效果不错。

    		    		/**
    		    *@author xiaoxie
    		    *@date create 2019/9/17
    		    *@return
    		     * 处理高并发
    		    */
    		    public class RequestHolder {
    		    
    		    //    线程处理
    		        private static final ThreadLocal<SysUser> userHolder = new ThreadLocal<SysUser>();
    		    
    		    //    登录
    		        private static final ThreadLocal<HttpServletRequest> requestHolder = new ThreadLocal<HttpServletRequest>();
    		    
    		    //    设置登陆用户
    		        public static void add(SysUser sysUser){
    		            userHolder.set(sysUser);
    		        }
    		    
    		        public static void add(HttpServletRequest request) {
    		            requestHolder.set(request);
    		        }
    		    
    		    //    处理当前用户
    		        public static SysUser getCurrentUser() {
    		            return userHolder.get();
    		        }
    		    
    		    //    处理当前登录
    		        public static HttpServletRequest getCurrentRequest() {
    		            return requestHolder.get();
    		        }
    		    
    		    //    消亡
    		        public static void remove(){
    		            userHolder.remove();
    		            requestHolder.remove();
    		        }
    		    }
    

    注意:SysUser是自己定义的model,根据自己的需要设置。

    在登陆或者注册完成之后就要消亡,否则会产生数据的溢出。

    	    	/**
    	    *@author xiaoxie
    	    *@date CREATE 2019/9/6  UPDATE 2019/9/12
    	    *@return 请求前后监听
    	    */
    	    @Slf4j
    	    public class HttpInterceptor extends HandlerInterceptorAdapter {
    	    
    	        private static final String START_TIME = "requestStartTime";
    	    
    	        @Override
    	        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	            String url = request.getRequestURI().toString();
    	            Map parameterMap = request.getParameterMap();
    	            log.info("request start. url:{}, params:{}", url, JsonMapper.obj2String(parameterMap));
    	            long start = System.currentTimeMillis();
    	            request.setAttribute(START_TIME, start);
    	            return true;
    	        }
    	    
    	        @Override
    	        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    	    //        String url = request.getRequestURI().toString();
    	    //        long start = (Long) request.getAttribute(START_TIME);
    	    //        long end = System.currentTimeMillis();
    	    //        log.info("request finished. url:{}, cost:{}", url, end - start);
    	            removeThreadLocalInfo();
    	        }
    	    
    	        @Override
    	        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    	            String url = request.getRequestURI().toString();
    	            long start = (Long) request.getAttribute(START_TIME);
    	            long end = System.currentTimeMillis();
    	            log.info("request completed. url:{}, cost:{}", url, end - start);
    	    
    	            removeThreadLocalInfo();
    	        }
    	    
    	        public void removeThreadLocalInfo() {
    	            RequestHolder.remove();
    	        }
    

    通过过滤器进行实现

    	    /**
    	    *@author xiaoxie
    	    *@date  create 2019/9/17
    	    *@return
    	     *
    	     * 登陆过滤
    	    */
    	    @Slf4j
    	    public class LoginFilter implements Filter {
    	        @Override
    	        public void init(FilterConfig filterConfig) throws ServletException {
    	    
    	        }
    	    
    	        @Override
    	        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    	            HttpServletRequest req = (HttpServletRequest) servletRequest;
    	            HttpServletResponse resp = (HttpServletResponse) servletResponse;
    	    
    	            SysUser sysUser = (SysUser) req.getSession().getAttribute("user");
    	    
    	            if (sysUser == null){
    	                String path = "/signin.jsp";
    	                resp.sendRedirect(path);
    	                return;
    	            }
    	    
    	    //        处理高并发
    	            RequestHolder.add(sysUser);
    	            RequestHolder.add(req);
    	            filterChain.doFilter(servletRequest,servletResponse);
    	            return;
    	        }
    	    
    	        @Override
    	        public void destroy() {
    	    
    	        }
    	    }
    

    简单的高并发就处理好了。

  • 相关阅读:
    损失函数及其梯度
    激活函数及其梯度
    梯度下降简介
    误差计算
    输出方式
    全连接层
    测试(张量)- 实战
    数据加载
    高阶操作
    java网络基础知识的简述
  • 原文地址:https://www.cnblogs.com/XSdao/p/11535340.html
Copyright © 2011-2022 走看看