java8和ThreadLocal解決時間格式的線程安全問題

一、傳統時間,日期,日期格式是變化的,多線程訪問下都是線程不安全的,解決此不安全問題實例如下
public class DateFormateThreadLocal {
   private static final ThreadLocal< DateFormat> df = new ThreadLocal(){
   @Override
   protected DateFormat initialValue() {
      return new SimpleDateFormat(“yyyy-MM-dd”);
     }
   };
   public static Date convert(String date) throws ParseException {
       return df.get().parse(date);
     }
 }
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
public class TestDateFormateThreadLocal {
   @Test
   public void test1() throws Exception{
      Callable< Date> task = new Callable() {
         @Override
         public Date call() throws Exception {
            return DateFormateThreadLocal.convert(“2019-12-15”);
           }
     };
   ExecutorService pool = Executors.newFixedThreadPool(10);
   List<Future< Date >> results = Lists.newArrayList();
   for(int i = 0;i < 10;i++){
      results.add(pool.submit(task));
     }
   for (Future result : results) {
      System.out.println(result.get().toLocaleString());
    }
   pool.shutdown();
   }
}
  
/華麗分割線 java8****/

public class TestDateFormateThreadLocal {

    
    @Test
    public  void  test2() throws Exception{
       // DateTimeFormatter dtf =  DateTimeFormatter.ISO_LOCAL_DATE;
        DateTimeFormatter dtf =  DateTimeFormatter.ofPattern("yyyy-MM-dd");
        Callable<LocalDate> task = new Callable<LocalDate>() {
            @Override
            public LocalDate call() throws Exception {
                return LocalDate.parse("2019-12-15",dtf);
            }
        };
        ExecutorService pool = Executors.newFixedThreadPool(10);
        List<Future<LocalDate>> results = Lists.newArrayList();
        for(int i = 0;i < 10;i++){
            results.add(pool.submit(task));
        }

        for (Future<LocalDate> result : results) {
            System.out.println(result.get().toString());
        }
        pool.shutdown();
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章