`

Format的子类中SimpleDateFormat,NumberFormat,MessageFormat那些是线程安全的

    博客分类:
  • java
阅读更多
SimpleDateFormat,NumberFormat,MessageFormat这三个类都是Format的之类,其中SimpleDateFormat,MessageFormat不是线程安全的,所以在类中不要应用它作为静态类变量,只能用他做方法的局部变量才是线程安全的,不过MessageFormat是线程安全的,
public class TestDateFormat {
public static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

public String getTime(Date date){
return df.format(date);
}

public static void main(String[] args) throws InterruptedException {
TestDateFormat tdf = new TestDateFormat();
TestClient tc1 = new TestClient(tdf);
TestClient tc2 = new TestClient(tdf);
tc1.start();
// tc1.sleep(3000);
tc2.start();
}

private static class TestClient extends Thread{
TestDateFormat tdf = null;
public TestClient(TestDateFormat tdf){
this.tdf = tdf;
}
@Override
public void run() {
try {
Thread.currentThread().sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("thread"+Thread.currentThread().getName()+":"+tdf.getTime(new Date()));
}
}
}


看来以后要写出线程安全的类,不要用全局变量了,用方法传值获取数据,最稳妥
分享到:
评论

相关推荐

    simpleDateFormat是线程不安全的

    标题指出的"simpleDateFormat是线程不安全的",意味着在多线程环境下,如果多个线程共享同一个`SimpleDateFormat`实例,可能会引发数据不一致或异常。 `SimpleDateFormat`类的线程不安全主要源于以下几个原因: 1....

    高并发之-SimpleDateFormat类的线程安全问题和解决方案.docx

    1. 使用ThreadLocal: 可以使用ThreadLocal将SimpleDateFormat对象封装在ThreadLocal中,这样每个线程都有自己的SimpleDateFormat对象,从而避免了线程安全问题。 2. 使用同步机制: 可以使用同步机制,例如...

    ThreadLocal:如何优雅的解决SimpleDateFormat多线程安全问题

    目录SimpleDateFormat诡异bug复现SimpleDateFormat诡异bug字符串日期转Date日期(parse)Date日期转String类型(format)SimpleDateFormat出现bug的原因如何解决SimpleDateFormat多线程安全问题局部变量使用...

    关于SimpleDateFormat的非线程安全问题及其解决方案.docx

    ### 关于SimpleDateFormat的非线程安全问题及其解决方案 #### 一、问题介绍 在Java开发过程中,`SimpleDateFormat`是被广泛使用的日期格式化工具类。然而,在多线程环境下,`SimpleDateFormat`存在非线程安全的...

    深入理解Java:SimpleDateFormat安全的时间格式化

    SimpleDateFormat类不是线程安全的,这意味着在多线程环境下,如果多个线程同时访问同一个SimpleDateFormat实例,可能会导致各种问题,例如转化的时间不正确、报错、线程被挂死等等。 知识点2: 创建...

    MessageFormat

    如果内置的`NumberFormat`和`DateFormat`不能满足需求,你可以创建自定义的`Format`子类,并在模式中使用它们。 8. **性能考虑** 尽管`MessageFormat`功能强大,但在性能敏感的应用中,可能需要权衡其使用,因为...

    详解SimpleDateFormat的线程安全问题与解决方案

    在Java编程中,`SimpleDateFormat`是一个常用的日期时间格式化工具类,但它的设计并不是线程安全的。本文将深入探讨`SimpleDateFormat`的线程安全问题及其解决方案。 ### 1. 线程安全问题的原因 `SimpleDateFormat...

    SimpleDateFormat线程不安全的5种解决方案.docx

    JDK 8 引入了新的日期时间 API,其中的 DateTimeFormatter 是线程安全的,可以替代 SimpleDateFormat。以下是使用 DateTimeFormatter 的示例: ```java import java.time.LocalDateTime; import java.time.format....

    Java SimpleDateFormat线程安全问题原理详解

    commons-lang3提供了FastDateFormat类,该类是线程安全的,可以在多线程环境下使用。例如: ```java import org.apache.commons.lang3.time.FastDateFormat; public class MyController { public void method() { ...

    Java多线程环境下SimpleDateFormat类安全转换

    SimpleDateFormat类是Java中常用的日期格式化类,但是它并不是线程安全的。在多线程环境下,如果多个线程同时使用同一个SimpleDateFormat对象,可能会出现日期格式化错误的问题。 2. 使用ThreadLocal解决线程安全...

    由浅入深解析 SimpleDateFormat

    1. SimpleDateFormat 是线程不安全的,因此在多线程环境下使用需要特别注意。 2. 创建 SimpleDateFormat 实例需要消耗大量的资源,因此应当尽量少创建实例。 3. SimpleDateFormat 可以使用 applyPattern 方法修改...

    Java多线程编程的线程安全性.docx

    Java标准库中有一些类,如ArrayList、HashMap和SimpleDateFormat,并未设计为线程安全,因此在多线程环境下直接使用可能导致数据不一致或其他问题。开发者应当了解每个类的线程安全特性,以便做出正确的选择和适当地...

    Java理论与实践:描绘线程安全性

    这类类在设计时就没有考虑线程安全,例如`SimpleDateFormat`,在1.4 JDK之前的版本中并未明确指出其线程不安全,导致许多开发者在并发场景中误用,引发错误。 在文档中清晰地记录类的线程安全性是至关重要的。如...

    SimpleDateFormat线程不安全的5种解决方案.md

    SimpleDateFormat线程不安全的5种解决方案.md

    java SimpleDateFormat &Calendar

    需要注意的是,由于`SimpleDateFormat`不是线程安全的,所以在多线程环境中,建议为每个线程创建单独的实例。 `Calendar`类则是Java中更底层的日期和时间工具,它提供了一套完整的API来操作日期和时间,包括添加、...

    JavaScript实现的SimpleDateFormat

    在JavaScript中,没有内置的`SimpleDateFormat`类,它是一个Java中的类,用于日期和时间的格式化。然而,由于JavaScript在处理日期时的功能相对有限,开发者常常需要自定义函数或者使用第三方库来实现类似的功能。这...

    有关SimpleDateFormat的常用方法说明

    - `SimpleDateFormat`是线程不安全的,如果在多线程环境中使用,需要考虑同步问题。 - 日期和时间的格式化字符串要与实际情况对应,避免出现理解错误。 以上就是关于`SimpleDateFormat`的一些常见用法和注意事项,...

    java中的format.pdf

    在Java编程语言中,`format`是一个重要的概念,主要用于数据的输出和字符串的格式化。以下将详细讨论Java中与`format`相关的知识点。 首先,`java.text.Format`是Java中处理格式化的一个抽象基类,它定义了将对象...

    DateFormat多线程问题

    Java 8 引入了`java.time.format.DateTimeFormatter`,这个类是线程安全的,可以作为`SimpleDateFormat`的一个更优选择。它提供了与`SimpleDateFormat`类似的功能,但避免了线程安全问题。 5. **池化`DateFormat`...

Global site tag (gtag.js) - Google Analytics