SimpleDateFormat非執行緒安全測試
阿新 • • 發佈:2018-11-13
package gulixueyuan_jdk18; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.junit.Test; public class TestSimpleDateFormat { @Test public void test1() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); System.out.println(sdf.parse("20180415")); } public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Callable<Date> task = new Callable<Date>() { @Override public Date call() throws Exception { return sdf.parse("20180415"); } }; ExecutorService pool = Executors.newFixedThreadPool(10); List<Future<Date>> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(pool.submit(task)); } list.forEach(e -> { try { System.out.println(e.get()); } catch (InterruptedException | ExecutionException e1) { e1.printStackTrace(); } }); } }
如何使用jdk1.8保證執行緒安全:
// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd"); Callable<LocalDate> task = new Callable<LocalDate>() { @Override public LocalDate call() throws Exception { return LocalDate.parse("20180415", dtf); } }; ExecutorService pool = Executors.newFixedThreadPool(10); List<Future<LocalDate>> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(pool.submit(task)); } list.forEach(e -> { try { System.out.println(e.get()); } catch (InterruptedException | ExecutionException e1) { e1.printStackTrace(); } }); pool.shutdown();