在需要进行日期与字符串相互转换的类中,经常会声明一个静态的SimpleDateFormat变量,如下所示:

然后就可以直接使用sdf的format和parse方法进行日期与字符串的相互转换,但是SimpleDateFormat并不是线程安全的,我们使用如下代码验证SimpleDateFormat的线程安全问题:

MyThread线程循环100次,每次从dates数组中随机取出一个日期字符串,依次进行parse和format操作后再输出最终的日期字符串,若声明一个MyThread线程运行,则输出如图所示:
1
输出的日期字符串都在dates数组中,说明parse和format操作均正常。若声明两个MyThread线程运行,则输出如图所示:
1
输出的日期字符串有不在dates数组中的,且还存在异常,说明parse和format操作并不是线程安全的。
在多线程下若要使用SimpleDateFormat,一种方法是每次进行日期与字符串转换时,声明一个SimpleDateFormat变量,但这样会产生过多的变量实例,另一种方法是使用ThreadLocal为每个线程保存一个SimpleDateFormat变量实例,如下所示:

同时修改MyThread,使用DateUtil进行日期与字符串转换,如下所示:

再声明两个MyThread线程运行,则输出正常。

基于WebSocket实现微信小程序的消息推送

微信小程序支持通过基于WebSocket进行消息推送,提供了相应的API,例如创建连接示例代码: JavaScript wx.connectSocket({ ...

阅读全文

基于nginx-sticky-module-ng实现会话保持(Sticky Sessions)

对服务进行集群部署,前端进行负载均衡时,需要实现会话保持,对于同一会话的多个请求,通过集群中的一个节点来提供服务。系统的部署结构如图所示,通过Resin...

阅读全文

ActiveMQ基于Zookeeper和LevelDB实现Master/Slave

ActiveMQ的Master/Slave目前支持三种实现方式: 1)Shared File System Master Slave; 2)JDBC Master Slave; 3)Replicated LevelDB Store。 对于第三种方...

阅读全文