溧阳免费做网站wordpress usermeta
web/
2025/10/6 9:16:06/
文章来源:
溧阳免费做网站,wordpress usermeta,做网页原型图一张多少钱,asp网站后台下载dateformat线程这是有关使用Java编程语言时的拟议实践的系列文章的第一篇。 所有讨论的主题均基于用例#xff0c;这些用例源于电信行业关键任务超高性能生产系统的开发。 在阅读本文的每个部分之前#xff0c;强烈建议您参考相关的Java API文档以获取详细信息和代码示例。… dateformat线程 这是有关使用Java编程语言时的拟议实践的系列文章的第一篇。 所有讨论的主题均基于用例这些用例源于电信行业关键任务超高性能生产系统的开发。 在阅读本文的每个部分之前强烈建议您参考相关的Java API文档以获取详细信息和代码示例。 所有测试均针对具有以下特征的Sony Vaio进行 系统openSUSE 11.1x86_64 处理器CPUIntelRCoreTM2 Duo CPU T6670 2.20GHz 处理器速度1,200.00 MHz 总内存RAM2.8 GB JavaOpenJDK 1.6.0_0 64位 应用以下测试配置 并发工人线程200 每个工作人员重复测试的线程数1000 整体测试次数100 在多线程环境中使用DateFormat 在多线程环境中使用DateFormat可能很棘手。 Java API文档明确指出 “ 日期格式不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问一种格式则必须在外部进行同步。 ” 典型的情况是使用预定义格式将日期转换为字符串表示形式反之亦然。 为每次转换创建新的DateFormat实例效率很低。 您应该记住静态工厂方法“ getDateInstance..”在使用时也会创建新的DateFormat实例。 大多数开发人员所做的就是使用DateFormat实现类例如SimpleDateFormat 构造DateFormat实例并将其值分配给类变量。 类范围的变量用于其所有日期解析和格式设置需求。 前面提到的方法虽然非常有效但是由于DateFormat类上缺少同步因此当多个线程访问类变量的相同实例时会引起问题。 解析创建Date对象时抛出的典型异常是 java.lang.NumberFormatException java.lang.ArrayIndexOutOfBoundsException 执行格式化时您还应该遇到格式错误的“ 日期到字符串”表示形式。 为了正确处理上述问题弄清多线程环境的体系结构至关重要。 Java虚拟机允许应用程序具有多个并行运行的执行线程。 通常在多线程环境JVM内部的容器或JVM本身中应执行线程池。 工作线程应在启动时构造并初始化以用于执行程序。 例如一个Web容器构造了一个工作线程池来服务所有传入的流量。 线程池是处理系统资源的最有效方法主要是因为线程创建和初始化是Java虚拟机的高资源消耗任务。 不过只需为要同时执行的每段代码创建一个新的执行线程 即可实现应用程序并行性。 关于类范围的DateFormat实例 如果你已经明确了NO 线程池将在您的环境中使用那么只有新的主题实例同时访问你的DateFormat实例。 在这种情况下建议从外部同步该DateFormat实例 如果使用线程池则可以同时访问DateFormat实例的线程实例数量有限。 因此建议使用ThreadLocal方法为每个线程创建单独的DateFormat实例。 以下是“ getDateInstance..”“同步”和ThreadLocal方法的示例 package com.javacodegeeks.test;import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ConcurrentDateFormatAccess {public Date convertStringToDate(String dateString) throws ParseException {return SimpleDateFormat.getDateInstance(DateFormat.MEDIUM).parse(dateString);}}package com.javacodegeeks.test;import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ConcurrentDateFormatAccess {private DateFormat df new SimpleDateFormat(yyyy MM dd);public Date convertStringToDate(String dateString) throws ParseException {Date result;synchronized(df) {result df.parse(dateString);}return result;}} 这里要注意的事情 每个执行“ convertStringToDate”操作的线程都试图在获取对DateFormat类变量instance的引用之前获取DateFormat对象的监视器锁定。 如果另一个线程持有该锁则当前线程将等待直到释放该锁。 这样一次只有一个线程正在访问DateFormat实例。 package com.javacodegeeks.test;import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ConcurrentDateFormatAccess {private ThreadLocalDateFormat df new ThreadLocalDateFormat () {Overridepublic DateFormat get() {return super.get();}Overrideprotected DateFormat initialValue() {return new SimpleDateFormat(yyyy MM dd);}Overridepublic void remove() {super.remove();}Overridepublic void set(DateFormat value) {super.set(value);}};public Date convertStringToDate(String dateString) throws ParseException {return df.get().parse(dateString);}} 这里要注意的事情 每个执行“ convertStringToDate”操作的线程都将调用“ df.get”操作以初始化或检索其本地范围内的DateFormat实例的已初始化引用。 下面我们提供上述三种方法之间的性能比较表注意我们已经测试了DateFormat实用程序类的解析功能。根据特定的日期格式我们将日期的String表示形式转换为等效的Date对象。 横轴表示测试运行的次数纵轴表示每次测试运行的每秒平均事务数TPS。 因此较高的值更好。 如您所见通过使用线程池和ThreadLocal方法与“同步”方法和“ getDateInstance..”方法相比您可以获得更高的性能。 最后我要指出的是使用不带线程池的ThreadLocal方法等同于使用“ getDateInstance..”方法因为每个新线程都必须在使用之前初始化其本地DateFormat实例因此需要一个新的DateFormat实例将在每次执行时创建。 编码愉快 贾斯汀 相关文章 Java最佳实践–高性能序列化 Java最佳实践– Vector vs ArrayList vs HashSet Java最佳实践–字符串性能和精确字符串匹配 Java最佳实践–队列之战和链接的ConcurrentHashMap Java最佳实践– Char到Byte和Byte到Char的转换 翻译自: https://www.javacodegeeks.com/2010/07/java-best-practices-dateformat-in.htmldateformat线程
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87829.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!