一、傳統時間,日期,日期格式是變化的,多線程訪問下都是線程不安全的,解決此不安全問題實例如下
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();
}