java.concurrent.ThreadPoolCreationRule.rule.desc 1 (1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); pool.execute(()-> System.out.println(Thread.currentThread().getName())); pool.shutdown();//gracefully shutdown ]]> //in code userThreadPool.execute(thread); ]]> 1 java.concurrent.AvoidManuallyCreateThreadRule.rule.desc 2 (1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); singleThreadPool.execute(()-> System.out.println(Thread.currentThread().getName())); singleThreadPool.shutdown(); ]]> 2 (1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); singleThreadPool.execute(()-> System.out.println(Thread.currentThread().getName())); singleThreadPool.shutdown(); ]]> java.concurrent.AvoidCallStaticSimpleDateFormatRule.rule.desc DATE_FORMATTER = new ThreadLocal() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; ]]> 2 2 userThreadLocal = new ThreadLocal(); public static void set(User user){ userThreadLocal.set(user); } public static User get(){ return userThreadLocal.get(); } public static void remove(){ userThreadLocal.remove(); } } /** * @author caikang * @date 2017/04/07 */ public class UserInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { UserHolder.set(new User()); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { UserHolder.remove(); } } ]]> 3 java.concurrent.CountDownShouldInFinallyRule.rule.desc 3