系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 网络编程 > JavaScript > 详细页面

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

时间:2020-02-09来源:系统城作者:电脑系统城

一、SimpleDateFormat类


 
  1. package state;
  2.  
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6.  
  7. /**
  8. * SimpleDateFormat类负责日期的转换与格式化
  9. * 解决SimpleDateFormat类多线程环境下转换错误问题
  10. * @author zc
  11. *
  12. */
  13. public class SimpleDateFormatThread extends Thread{
  14. private SimpleDateFormat sdf;
  15. private String dateString;
  16.  
  17. public SimpleDateFormatThread(SimpleDateFormat sdf,String dateString) {
  18. super();
  19. this.sdf =sdf;
  20. this.dateString =dateString;
  21. }
  22.  
  23. @Override
  24. public void run() {
  25.  
  26. try {
  27. //System.out.println(dateString);
  28. //刚开始日期格式设置错误为YYYY-MM-dd
  29. Date date =DateTools.getSimpleDateFormat("yyyy-MM-dd").parse(dateString);
  30. // System.out.println(date);
  31. String newDateString =DateTools.getSimpleDateFormat("yyyy-MM-dd").format(date).toString();
  32.  
  33. if(!newDateString.equals(dateString)) {
  34. System.out.println("ThreadName="+this.getName()+"报错日期"+dateString+" 转换日期"+newDateString);
  35. }else {
  36. System.out.println("ThreadName="+this.getName()+"日期"+dateString+" 转换日期"+newDateString);
  37. }
  38. } catch (ParseException e) {
  39. // TODO Auto-generated catch block
  40. e.printStackTrace();
  41. }
  42. }
  43.  
  44. public static void main(String[] args) {
  45. SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
  46. String[] dateStringArray =new String[]{
  47. "2020-02-05","2020-02-06","2020-02-07","2020-02-08"
  48. };
  49. SimpleDateFormatThread []threadArray= new SimpleDateFormatThread[4];
  50. for(int i=0;i<4;i++) {
  51. threadArray[i] =new SimpleDateFormatThread(sdf,dateStringArray[i]);
  52. }
  53. for(int i=0;i<4;i++) {
  54. threadArray[i].start();
  55. }
  56. }
  57. }
  58.  
  59. class DateTools{
  60. //ThreadLocal能使线程绑定到指定的对象
  61. private static ThreadLocal<SimpleDateFormat> t = new ThreadLocal<SimpleDateFormat>();
  62.  
  63. public static SimpleDateFormat getSimpleDateFormat(String datePattern) {
  64. SimpleDateFormat sdf=null;
  65. sdf =t.get();
  66. if(sdf==null) {
  67.  
  68. sdf =new SimpleDateFormat(datePattern);
  69. t.set(sdf);
  70. }
  71. return sdf;
  72. }
  73. }
  74.  

二、线程状态和线程组


 
  1. (2)线程5状态
  2. //NEW 尚未启动的线程
  3. //RUNNABLE Java虚拟机中执行的线程
  4. //TERMINATED 已经退出的线程
  5. //BLOCKED 阻塞受监视的线程
  6. //WAITING 无限等待另一个线程
  7. //TIMED_WAITING 等待另一个线程指定时间
  8.  
  9. package state;
  10. /**
  11. * 线程中状态和线程组
  12. * @author zc
  13. *
  14. */
  15. public class MyThread extends Thread{
  16. //NEW
  17. //RUNNABLE
  18. //TERMINATED
  19. //BLOCKED
  20. //WAITING
  21. //TIMED_WAITING
  22. public MyThread() {
  23. System.out.println("构造方法中的状态: "+Thread.currentThread().getState());
  24. }
  25. @Override
  26. public void run() {
  27. System.out.println("run方法中的状态:"+Thread.currentThread().getState());
  28. try {
  29. Thread.sleep(1000);
  30. } catch (InterruptedException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34. }
  35.  
  36. public static void main(String[] args) {
  37. MyThread myThread = new MyThread();
  38. System.out.println("main方法中的状态1 "+ myThread.getState());
  39.  
  40. Thread t1 = new Thread();
  41. Thread t2 = new Thread();
  42. ThreadGroup group =new ThreadGroup("左氏线程组");
  43. Thread t3 = new Thread(group,t1);
  44. Thread t4 = new Thread(group,t2);
  45. t3.start();
  46. t4.start();
  47. System.out.println("活动的线程数量为: " +group.activeCount());
  48. System.out.println("线程组的名称为: "+group.getName());
  49.  
  50. try {
  51. myThread.start();
  52. Thread.sleep(1000);
  53. System.out.println("main方法中的状态2 "+ myThread.getState());
  54. } catch (InterruptedException e) {
  55. // TODO Auto-generated catch block
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60.  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载