importjava.text.SimpleDateFormat;importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;public classTestSimpleDateFormat {public static void main(String[] args) throwsException {//oldDateMethod();//oldDateMethodThreadSafe();
java8DateMethodThreadSave();
}/**线程不安全,报错*/
public static void oldDateMethod() throwsException{
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd");
Callable task = new Callable() {
@Overridepublic Date call() throwsException {return sdf.parse("20161121");
}
};
ExecutorService pool= Executors.newFixedThreadPool(10);
List> results = new ArrayList<>();for (int i = 0; i < 10; i++) {
results.add(pool.submit(task));
}for (Futurefuture : results) {
System.out.println(future.get());
}
pool.shutdown();
}//解决多线程安全问题
public static void oldDateMethodThreadSafe() throwsException{
Callable task = new Callable() {
@Overridepublic Date call() throwsException {return DateFormatThreadLocal.convert("20161121");
}
};
ExecutorService pool= Executors.newFixedThreadPool(10);
List> results = new ArrayList<>();for (int i = 0; i < 10; i++) {
results.add(pool.submit(task));
}for (Futurefuture : results) {
System.out.println(future.get());
}
pool.shutdown();
}/**java8的实现*/
public static void java8DateMethodThreadSave() throwsException{
DateTimeFormatter dtf= DateTimeFormatter.ofPattern("yyyyMMdd");
Callable task = new Callable() {
@Overridepublic LocalDate call() throwsException {
LocalDate ld= LocalDate.parse("20161121", dtf);returnld;
}
};
ExecutorService pool= Executors.newFixedThreadPool(10);
List> results = new ArrayList<>();for (int i = 0; i < 10; i++) {
results.add(pool.submit(task));
}for (Futurefuture : results) {
System.out.println(future.get());
}
pool.shutdown();
}
}