首页 > 编程语言 > 详细

使用 SimpleDateFormat 报错 Exception in thread :java.lang.NumberFormatException: For input string: ""

时间:2020-01-02 17:55:36      阅读:142      评论:0      收藏:0      [点我收藏+]
public class TestSimpleDateFormat {

    private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static Date parse(String date) throws ParseException {
        return DATE_FORMAT.parse(date);
    }

    public static void main(String[] args) throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(500);
        for (int i = 0; i < 500; i++) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 1000000; i++) {
                        try {
                            DATE_FORMAT.parse("2014-01-01 00:00:00");
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
        }
        Thread.sleep(3000000);
    }
}

报错  Exception in thread :java.lang.NumberFormatException: For input string: ""

技术分享图片

参考:https://www.cnblogs.com/zuoxiaolong/p/con1.html

      https://blog.csdn.net/Mrs_chens/article/details/90166399

 

 分析

技术分享图片

 

 

 翻译过来就是:日期格式化的类是非同步的,建议为每一个线程创建独立的格式化实例。如果多个线程并发访问同一个格式化实例,就必须在外部添加同步机制。

 

解决办法一     加入synchronized 关键字  但是控制台 还会隐约有报错的信息闪过

public class TestSimpleDateFormat {

    private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static Date parse(String strDate) throws ParseException {

        synchronized (DATE_FORMAT) {

            return DATE_FORMAT.parse(strDate);

        }
    }

    public static void main(String[] args) throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(500);
        for (int i = 0; i < 500; i++) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 1000000; i++) {
                        try {
                            System.out.println(DATE_FORMAT.parse("2019-05-13 11:30:59"));
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
        }
        Thread.sleep(3000000);
    }
}

 

解决办法二      使用java8  DateTimeFormatter (推荐使用)

public class TestSimpleDateFormat {

    private static final DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    public static LocalDateTime parse2(String dateNow) {

        return LocalDateTime.parse(dateNow, sdf);

    }

    public static void main(String[] args) throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(500);
        for (int i = 0; i < 500; i++) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 1000000; i++) {
                        System.out.println(sdf.parse("2019-05-13 11:30:59"));
                    }
                }
            });
        }
        Thread.sleep(3000000);
    }
}

使用 SimpleDateFormat 报错 Exception in thread :java.lang.NumberFormatException: For input string: ""

原文:https://www.cnblogs.com/wf-zhang/p/12133728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!