`
mazhaoeryuan
  • 浏览: 2594 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

SimpleDataFormat在多线程访问不安全

    博客分类:
  • java
阅读更多

最近项目在做压力测试时,总是出现java.lang.NumberFormatException: multiple points错误;源于代码里使用SimpleDateFormat来解析字符串日期,开始以为是传入的被解析字符串非法,通过debug调试,发现不是该问题引起。然后去百度和查找API, API里面标记 SimpleDateFormat中的日期格式不是同步的。推荐(建议)为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须保持外部同步。

  JDK原始文档如下:
  Synchronization:
  Date formats are not synchronized.
  It is recommended to create separate format instances for each thread.
  If multiple threads access a format concurrently, it must be synchronized externally.

 

通过看JDK源码来看看为什么SimpleDateFormat和DateFormat类不是线程安全的真正原因:

  SimpleDateFormat继承了DateFormat,在DateFormat中定义了一个protected属性的 Calendar类的对象:calendar。只是因为Calendar累的概念复杂,牵扯到时区与本地化等等,Jdk的实现中使用了成员变量来传递参数,这就造成在多线程的时候会出现错误。

 

具体参考:http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html

分享到:
评论

相关推荐

    易语言多线程访问网页

    6. **性能优化**:在多线程访问网页时,还需要考虑线程池的使用,以避免频繁创建和销毁线程的开销。线程池可以预先创建一定数量的线程,用于复用,提高系统效率。 7. **异常处理**:网络访问过程中可能出现各种异常...

    易语言多线程访问网页源码,多线程访问网页,子程序_访问网页(1).zip

    4. **异常处理**:在多线程环境中,要确保每个线程都有适当的错误处理机制,以免一个线程的异常影响其他线程。 5. **线程池**:为了提高效率,开发者可能会使用线程池,预先创建一组线程,当需要时重用它们,而不是...

    Qt 多线程访问同一个变量

    标题"Qt 多线程访问同一个变量"涉及到的是如何在多线程环境下确保对共享资源(此处为一个全局变量)的安全访问。描述中提到了使用互斥锁来解决这个问题,并通过创建两个线程ThreadA和ThreadB来演示这一过程。 首先...

    mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的.所以同样QT的QSqlDatabase也是线程不安全的,QS会崩溃

    mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的 QT的QSqlDatabase是基于mysql的,所以...现讲明mysql为什么是线程不安全的,以及在多线程环境下如何使用mysql,QSqlDatabase不崩溃的方法.

    c# 委托访问listbox多线程操作

    - **线程安全的集合**:在多线程环境中,可以考虑使用线程安全的集合类(如 `ConcurrentBag<T>` 或 `ConcurrentQueue<T>`),以减少锁的竞争并提高性能。 - **异步编程模型**:除了多线程外,还可以使用 C# 中的异步...

    COM多线程访问演示

    在多线程环境中,COM提供了不同的线程访问策略,主要包括单线程公寓(STA, Single Threaded Apartment)和多线程公寓(MTA, Multi Threaded Apartment)。本示例“COM多线程访问演示”旨在帮助开发者理解并掌握如何...

    C#多线程List的非线程安全性

    然而,List并未设计为线程安全的容器,这意味着在多个线程同时访问和修改List时,可能会引发数据竞争和不一致的情况。标题中提到的“List添加对象的误区”主要体现在多线程环境下对List<T>.Add()方法的并发调用。 ...

    多线程同步(多线程如何访问临界区资源)

    在提供的示例中,"多线程同步(多线程如何访问临界区资源)"演示了如何在多线程环境中使用临界区保护共享资源。首先,定义一个全局或静态变量作为共享资源,然后创建多个线程。每个线程在执行时都会尝试访问这个资源...

    python 多线程实现多个网址的多次快速访问

    在Python编程中,多线程是一种并发执行任务的机制,尤其在处理I/O密集型任务如网络请求时,能够显著提高程序效率。本教程将详细讲解如何使用Python的多线程来实现对多个网址的快速访问,并记录访问结果。 首先,...

    多线程访问网页测试

    在单线程系统中,程序按照顺序执行任务,而在多线程系统中,可以同时处理多个任务。C#提供了System.Threading命名空间,其中包含了许多类和方法,如Thread、Mutex、Semaphore等,用于创建和管理线程。在这个例子中,...

    C#多线程互斥实例 多线程获取同一变量

    在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统...

    delphi多线程访问数据库

    在多线程环境中,我们需要确保每个线程拥有自己的数据库连接,因为共享连接在多线程中可能会导致竞态条件和其他同步问题。 `Unit1.dfm`和`Unit2.dfm`是表单文件,记录了这些单元对应的用户界面元素。虽然多线程主要...

    Java多线程与线程安全实践(基于Http协议的断点续传)源码.zip

    Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多...

    QT中sqlite多线程操作4个注意问题

    然而,当在多线程环境中使用SQLite时,需要注意一些关键问题以确保数据的安全性和一致性。以下是四个重要的考虑因素: 1. **线程安全**: SQLite本身并不提供完全的线程安全,这意味着在不同线程中并发访问数据库...

    Delphi多线程的安全问题分析及解决

    通过使用 `CreateMutex`, `ReleaseMutex` 和 `OpenMutex` 等函数,可以在多线程或多进程中实现对共享资源的独占访问。 以下是一个使用互斥对象实现线程同步的例子: ```pascal var MutexHandle: HANDLE; ...

    关于如何解决HashMap线程安全问题的介绍

    3. 使用HashTable:虽然HashTable是线程安全的,但由于其所有操作都是同步的,所以在多线程并发访问时,性能较低。因此,在现代Java开发中,通常更倾向于使用ConcurrentHashMap。 4. 避免在多线程环境中直接使用...

    C#多线程读写sqlite

    3. **线程安全**:在多线程环境中,对SQLite的读写操作需要确保线程安全。否则,多个线程同时访问数据库可能导致数据损坏或不一致。C#中的`lock`关键字是一种同步机制,可以防止多个线程同时访问共享资源。 4. **...

    C# 高效线程安全,解决多线程写txt日志类.zip

    在多线程环境中,直接并发写入txt文件可能会导致数据交错,因为多个线程可能会同时写入,破坏日志的完整性。为了解决这个问题,开发者通常会引入同步机制,如使用`lock`关键字或者.NET提供的其他同步原语来确保每次...

    c#在多线程中访问Form中控件的多种解决方案

    ### C# 在多线程中访问 Form 中控件的多种解决方案 #### 背景与问题阐述 在 Windows Forms 应用程序开发中,多线程技术被广泛应用于提高应用程序的响应性和性能。然而,在多线程环境中访问 UI 控件(如 `TextBox`...

    C# 高效线程安全,解决多线程写txt日志类

    本主题将深入探讨如何在C#中创建一个高效的线程安全日志类,用于在多线程环境中安全地写入txt日志。 首先,我们需要理解线程安全的概念。线程安全意味着当多个线程访问同一段代码时,该代码能正确处理并发操作,...

Global site tag (gtag.js) - Google Analytics