`
xiangqian0505
  • 浏览: 322014 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

测试多线程中格式化日期列的安全问题

阅读更多
/**一个类中要访问多个线程,同时又用到格式化日期类时, 格式化日期类对象不能同时访问多个线程
*访问多个线程,格式化日期类会出现意想不到的格式化错误,一个线程只能对应一个格式化日期类
* author :wuxq date:2011-10-26
*/


package biz;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
	private SimpleDateFormat dateFormat;

	public static void main(String[] args) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
		Date today = new Date();
		Date tomorrow = new Date(today.getTime() + 1000 * 60 * 60 * 24);
		System.out.println(today); // 今天是2011-10-27
		System.out.println(tomorrow); // 明天是2010-10-28
		
		synchronized (dateFormat) {
			Thread thread2 = new Thread(new Thread2(dateFormat, tomorrow));
			thread2.start();
		}
		synchronized (dateFormat2) {
			Thread thread1 = new Thread(new Thread1(dateFormat2, today));
			thread1.start();
		}
	}
}

class Thread1 implements Runnable {
	private SimpleDateFormat dateFormat;
	private Date date;

	public Thread1(SimpleDateFormat dateFormat, Date date) {
		this.dateFormat = dateFormat;
		this.date = date;
	}

	public void run() {
		for (;;) {// 一直循环到出问题为止吧。
			String strDate = dateFormat.format(date);
			System.out.println(strDate);
			// 如果不等于2010-01-11,证明出现线程安全问题了!!!!
			if (!"2011-10-27".equals(strDate)) {
				System.err.println("today=" + strDate);
				System.exit(0);
			}
		}
	}
}

class Thread2 implements Runnable {
	private SimpleDateFormat dateFormat;
	private Date date;

	public Thread2(SimpleDateFormat dateFormat, Date date) {
		this.dateFormat = dateFormat;
		this.date = date;
	}

	public void run() {
		for (;;) {
			String strDate = dateFormat.format(date);
			System.out.println(strDate);
			if (!"2011-10-28".equals(strDate)) {
				System.err.println("tomorrow=" + strDate);
				System.exit(0);
			}
		}
	}
}

 

分享到:
评论

相关推荐

    python多线程接口案例

    此外,`time`库被用来处理时间相关的操作,如获取当前时间戳和格式化日期时间。`random`库可能用于生成随机数据,模拟不同用户的行为。而`requests`库是用于发送HTTP请求的核心工具。 总之,这个Python脚本展示了...

    android日期隐藏年月日,兼容7.0

    本文将详细讲解如何在Android 7.0及更高版本中处理日期格式化问题。 首先,我们要明确Android 7.0(API级别24)已经支持Java 8的部分特性,包括`java.time`包。这个包提供了更强大、更易于使用的日期和时间API,...

    软件测试常见问题

    - **日期和时间格式**:适应当地的日期时间表示方式 - **键盘布局**:考虑不同国家的键盘布局差异 ### 软件测试项目的启动时机 - **最佳时机**:软件测试应该尽早介入,在需求分析阶段就开始参与,以确保后续测试...

    Windows 7系统使用多线程加快文件复制?.docx

    要使用RoboCopy进行多线程复制,可以使用以下命令格式: ``` Robocopy /s 源目录 目标目录 /E /MT:线程数 /LOG:日志文件名 ``` 这里: - `/s`表示包含子目录。 - `/E`表示复制空目录。 - `/MT:线程数`指定了使用...

    swift-Sprinter是在iOS和MacOS上用于格式化字符串的库

    此外,Sprinter还提供了对多线程环境的支持,确保在并发操作中正确地处理字符串格式化。这对于那些需要在后台线程处理大量字符串格式化的应用来说,是个非常重要的特性。 标签"Swift开发-工具类"表明,Sprinter是一...

    软件测试与常见Bug大全

    9. 并发和多线程Bug:在多用户环境下,可能引发竞态条件、死锁等问题。 10. 回归Bug:在修复一个Bug后,可能引入新的问题,导致其他功能失效。 测试人员需要使用各种工具和技术进行测试,如自动化测试工具(如...

    Logic Java内部测试机试题

    PrintCalendar这个部分可能表明文档内容涉及到了如何在Java中打印日历或者如何操作Calendar类对象,例如获取当前日期、修改日期、格式化输出等。 4. 可能涉及的其他Java编程知识,如数据类型、基本运算符、控制流...

    非常好看的winform 自定义日期控件.rar

    此外,可能还添加了一些额外的功能,如日期范围限制、自定义格式化日期字符串、多语言支持等。 在使用这个自定义日期控件时,你需要解压下载的rar文件,找到包含控件源代码的项目或类文件。通常,这些文件会有一个...

    异常测试应用及方法讲解

    4. 并发和多线程异常:测试多用户同时访问系统时可能出现的竞态条件、死锁等问题。 5. 安全异常:模拟恶意攻击,如SQL注入、跨站脚本攻击(XSS)、权限提升等,验证系统的安全防护机制。 6. 系统兼容性:测试系统在...

    一个c++写的log类,含工程测试代码

    在这个Log类中,可能包含了记录日志的不同级别(如DEBUG、INFO、WARN、ERROR等),以及格式化日志消息的方法。 多线程是现代软件开发中的常见需求,尤其是在服务器端应用。在多线程环境中,对共享资源的访问需要...

    java日期API

    `SimpleDateFormat`用于格式化和解析日期,但它不是线程安全的,所以在多线程环境中使用需要额外的同步措施。 Java 8引入了`java.time`包,这是Java日期API的一次重大改进。该包下包括多个类,如`LocalDate`、`...

    jtimepiec时间开发包.zip

    1. **日期和时间操作**: 提供了丰富的API来创建、解析、比较和格式化日期和时间。这包括支持ISO 8601标准和其他常见的日期时间格式。 2. **时区处理**: 支持全球不同的时区,可以方便地进行时区转换和计算,考虑到...

    QLogger:适用于Qt应用程序的多线程记录器

    QLogger的出现解决了单线程日志系统可能遇到的问题,如日志写入的同步问题,确保在多线程环境中数据的一致性和完整性。 在Qt框架中,QLogger提供了便捷的方法来整合到现有的代码结构中,支持自定义日志级别,方便...

    java计算24节气

    6. **线程安全与效率**:如果这个功能需要在多线程环境中使用,那么要考虑线程安全问题。通常,获取当前节气的计算不需要同步,因为它是只读操作。但如果涉及到频繁更新节气数据,可能需要加锁或者使用并发容器。 7...

    时间类型的窗体程序

    7. **多线程和定时器**:在时间跟踪或提醒功能中,可能会用到多线程或定时器。例如,可以使用C#的`System.Timers.Timer`类或Python的`threading.Timer`来定期执行任务,如检查是否到达某个设定的时间点。 8. **本地...

    windows下c语言获取日期时间的类

    9. **线程安全**:如果该类可能在多线程环境中使用,那么需要确保访问时间数据时是线程安全的,可能通过锁或其他同步机制实现。 使用这个类的示例代码可能如下: ```c #include "DateTimeClass.h" int main() { ...

    非常强大的java时间处理工具类!.docx

    然而,Java 8之前的日期API设计存在诸多不便,例如线程安全问题、功能分散等。为此,开发者们创建了xk-time,一个强大的时间处理工具类库,它充分利用Java 8的日期时间API,提供了丰富的功能,同时确保线程安全和...

    android日期选择DatePickerDialogDemo

    可以使用`SimpleDateFormat`类进行日期格式化。 6. **主题和样式** Android Studio允许自定义`DatePickerDialog`的主题和样式,可以通过修改主题属性或创建自定义样式实现。例如,可以改变对话框的颜色、字体大小...

    go项目工具集,加密、数据库、错误、文件、图片、限流、日志、随机、字符串、安全线程、时间、安全map。持续更新....zip

    11. **时间管理**:`time`包提供了日期和时间的操作,包括格式化、解析、定时器和延迟执行。 12. **安全的映射**:在Go中,一般使用标准库`sync.Map`来实现线程安全的映射,它简化了多goroutine环境下对映射的操作...

    C++ VS2015 Release X64 MD编译好的FMT库

    标题中的"C++ VS2015 Release X64 MD编译好的FMT库"指的是一款针对C++编程语言,使用Visual Studio 2015(VS2015)编译器,以Release模式、64位架构,并且采用多线程动态库(/MD)链接方式编译的FMT库。FMT库是一个...

Global site tag (gtag.js) - Google Analytics