`
mazhaoeryuan
  • 浏览: 2626 次
  • 性别: 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

分享到:
评论

相关推荐

    Qt 多线程访问同一个变量

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

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

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

    COM多线程访问演示

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

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

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

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

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

    多线程ADO安全访问SQL

    本文将深入探讨如何在Delphi环境下,利用ADO(ActiveX Data Objects)组件在多线程中安全地访问SQL数据库。标题“多线程ADO安全访问SQL”揭示了我们的讨论重点:在并发环境中,如何确保数据的一致性和完整性。 **多...

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

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

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

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

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

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

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

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

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

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

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

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

    C#多线程读写sqlite

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

    采用全局变量方式实现多线程的通信

    在多线程编程中,线程间的通信是一个关键的议题,尤其当多个线程需要共享数据或协调工作时。全局变量作为一种简单的方式被用于实现线程间的通信,尤其是在MFC(Microsoft Foundation Classes)框架下。下面我们将...

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

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

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

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

    Java多线程与线程安全实践-基于Http协议的断点续传

    Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多...

    VC_多线程的访问数据库实例程序

    线程安全意味着在多线程环境下,代码可以正确地运行而不会导致数据不一致或资源竞争。这通常需要使用同步机制,如临界区(CRITICAL_SECTION)、互斥量(mutex)、信号量(semaphore)或事件(event)来确保同一时刻...

    .NET多线程实例

    在多线程环境中,事件处理通常在引发事件的线程上运行,因此,如果一个线程修改了UI控件的状态,而另一个线程尝试处理相关事件,可能会导致线程不安全。使用适当的同步机制可以解决这个问题。 "资源管理器"可能涉及...

    多线程安全dictionary

    然而,原生的`Dictionary, TValue>`在多线程环境下直接并发访问可能存在线程安全性问题。为了解决这个问题,.NET提供了一些线程安全的解决方案。 标题中的"多线程安全dictionary"指的是在多线程环境下能够确保数据...

Global site tag (gtag.js) - Google Analytics