Java多线程环境下SimpleDateFormat类安全转换
一、SimpleDateFormat类
packagestate; importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.util.Date; /** *SimpleDateFormat类负责日期的转换与格式化 *解决SimpleDateFormat类多线程环境下转换错误问题 *@authorzc * */ publicclassSimpleDateFormatThreadextendsThread{ privateSimpleDateFormatsdf; privateStringdateString; publicSimpleDateFormatThread(SimpleDateFormatsdf,StringdateString){ super(); this.sdf=sdf; this.dateString=dateString; } @Override publicvoidrun(){ try{ //System.out.println(dateString); //刚开始日期格式设置错误为YYYY-MM-dd Datedate=DateTools.getSimpleDateFormat("yyyy-MM-dd").parse(dateString); //System.out.println(date); StringnewDateString=DateTools.getSimpleDateFormat("yyyy-MM-dd").format(date).toString(); if(!newDateString.equals(dateString)){ System.out.println("ThreadName="+this.getName()+"报错日期"+dateString+"转换日期"+newDateString); }else{ System.out.println("ThreadName="+this.getName()+"日期"+dateString+"转换日期"+newDateString); } }catch(ParseExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicstaticvoidmain(String[]args){ SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd"); String[]dateStringArray=newString[]{ "2020-02-05","2020-02-06","2020-02-07","2020-02-08" }; SimpleDateFormatThread[]threadArray=newSimpleDateFormatThread[4]; for(inti=0;i<4;i++){ threadArray[i]=newSimpleDateFormatThread(sdf,dateStringArray[i]); } for(inti=0;i<4;i++){ threadArray[i].start(); } } } classDateTools{ //ThreadLocal能使线程绑定到指定的对象 privatestaticThreadLocalt=newThreadLocal (); publicstaticSimpleDateFormatgetSimpleDateFormat(StringdatePattern){ SimpleDateFormatsdf=null; sdf=t.get(); if(sdf==null){ sdf=newSimpleDateFormat(datePattern); t.set(sdf); } returnsdf; } }
二、线程状态和线程组
(2)线程5状态 //NEW尚未启动的线程 //RUNNABLEJava虚拟机中执行的线程 //TERMINATED已经退出的线程 //BLOCKED阻塞受监视的线程 //WAITING无限等待另一个线程 //TIMED_WAITING等待另一个线程指定时间 packagestate; /** *线程中状态和线程组 *@authorzc * */ publicclassMyThreadextendsThread{ //NEW //RUNNABLE //TERMINATED //BLOCKED //WAITING //TIMED_WAITING publicMyThread(){ System.out.println("构造方法中的状态:"+Thread.currentThread().getState()); } @Override publicvoidrun(){ System.out.println("run方法中的状态:"+Thread.currentThread().getState()); try{ Thread.sleep(1000); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicstaticvoidmain(String[]args){ MyThreadmyThread=newMyThread(); System.out.println("main方法中的状态1"+myThread.getState()); Threadt1=newThread(); Threadt2=newThread(); ThreadGroupgroup=newThreadGroup("左氏线程组"); Threadt3=newThread(group,t1); Threadt4=newThread(group,t2); t3.start(); t4.start(); System.out.println("活动的线程数量为:"+group.activeCount()); System.out.println("线程组的名称为:"+group.getName()); try{ myThread.start(); Thread.sleep(1000); System.out.println("main方法中的状态2"+myThread.getState()); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。