最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程編程中使用DateFormat類

 更新時間:2015年07月12日 09:11:05   投稿:goldensun  
這篇文章主要介紹了Java多線程編程中使用DateFormat類,文中介紹了三種相關(guān)的并發(fā)使用方法,需要的朋友可以參考下

 DateFormat 類是一個非線程安全的類。javadocs 文檔里面提到"Date formats是不能同步的。 我們建議為每個線程創(chuàng)建獨立的日期格式。 如果多個線程同時訪問一個日期格式,這需要在外部加上同步代碼塊。"

以下的代碼為我們展示了如何在一個線程環(huán)境里面使用DateFormat把字符串日期轉(zhuǎn)換為日期對象。創(chuàng)建一個實例來獲取日期格式會比較高效,因為系統(tǒng)不需要多次獲取本地語言和國家。
 

public class DateFormatTest {
 
 private final DateFormat format =
      new SimpleDateFormat("yyyyMMdd");
 
 public Date convert(String source)
           throws ParseException{
  Date d = format.parse(source);
  return d;
 }
}

這段代碼是非線程安全的。我們可以通過在多個線程中調(diào)用它。在以下調(diào)用的代碼中,我創(chuàng)建了一個有兩個線程的線程池,并提交了5個日期轉(zhuǎn)換任務(wù),之后查看運行結(jié)果:
 

final DateFormatTest t =new DateFormatTest();
Callable<Date> task =new Callable<Date>(){
  public Date call()throws Exception {
    return t.convert("20100811");
  }
};
 
//讓我們嘗試2個線程的情況
ExecutorService exec = Executors.newFixedThreadPool(2);
List<Future<Date>> results =
       new ArrayList<Future<Date>>();
 
//實現(xiàn)5次日期轉(zhuǎn)換
for(int i =0; i <5; i++){
  results.add(exec.submit(task));
}
exec.shutdown();
 
//查看結(jié)果
for(Future<Date> result : results){
  System.out.println(result.get());
}

代碼的運行結(jié)果并非如我們所愿 - 有時候,它輸出正確的日期,有時候會輸出錯誤的(例如.Sat Jul 31 00:00:00 BST 2012),有些時候甚至?xí)伋鯪umberFormatException!


如何并發(fā)使用DateFormat類

我們可以有多種方法在線程安全的情況下使用DateFormat類。

1. 同步

最簡單的方法就是在做日期轉(zhuǎn)換之前,為DateFormat對象加鎖。這種方法使得一次只能讓一個線程訪問DateFormat對象,而其他線程只能等待。
 

public Date convert(String source)
          throws ParseException{
 synchronized(format) {
  Date d = format.parse(source);
  return d;
 }
}


2. 使用ThreadLocal

另外一個方法就是使用ThreadLocal變量去容納DateFormat對象,也就是說每個線程都有一個屬于自己的副本,并無需等待其他線程去釋放它。這種方法會比使用同步塊更高效。
 

public class DateFormatTest {
 
 private static final ThreadLocal<DateFormat> df
         = new ThreadLocal<DateFormat>(){
  @Override
  protected DateFormat initialValue() {
    return new SimpleDateFormat("yyyyMMdd");
  }
 };
 
 public Date convert(String source)
           throws ParseException{
  Date d = df.get().parse(source);
  return d;
 }
}

3. Joda-Time

Joda-Time 是一個很棒的開源的 JDK 的日期和日歷 API 的替代品,其 DateTimeFormat 是線程安全而且不變的。

 

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.Date;
 
public class DateFormatTest {
 
 private final DateTimeFormatter fmt =
    DateTimeFormat.forPattern("yyyyMMdd");
 
 public Date convert(String source){
  DateTime d = fmt.parseDateTime(source);
  returnd.toDate();
 }
}


相關(guān)文章

  • Java中Arrays數(shù)組工具類的基本使用詳解

    Java中Arrays數(shù)組工具類的基本使用詳解

    Arrays類中的方法都是static修飾的靜態(tài)方法,在使用的時候可以直接使用類名進行調(diào)用,而"不用"使用對象來調(diào)用(注意:是"不用"?而不是?"不能"),這篇文章主要給大家介紹了關(guān)于Java中Arrays數(shù)組工具類的基本使用,需要的朋友可以參考下
    2021-12-12
  • SpringMVC攔截器——實現(xiàn)登錄驗證攔截器的示例代碼

    SpringMVC攔截器——實現(xiàn)登錄驗證攔截器的示例代碼

    本篇文章主要介紹了SpringMVC攔截器——實現(xiàn)登錄驗證攔截器的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java-URLDecoder、URLEncoder使用及說明

    Java-URLDecoder、URLEncoder使用及說明

    本文介紹了Java中URLDecoder和URLEncoder類的使用方法,包括編碼和解碼規(guī)則、推薦的編碼方案、解碼器處理非法字符的方法以及URL編碼和解碼的示例
    2024-12-12
  • Java獲取中文拼音、中文首字母縮寫和中文首字母的示例

    Java獲取中文拼音、中文首字母縮寫和中文首字母的示例

    本文主要介紹了Java獲取中文拼音、中文首字母縮寫和中文首字母,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-10-10
  • java、python、JavaScript以及jquery循環(huán)語句的區(qū)別

    java、python、JavaScript以及jquery循環(huán)語句的區(qū)別

    本篇文章主要介紹java、python、JavaScript以及jquery的循環(huán)語句的區(qū)別,這里整理了它們循環(huán)語句語法跟示例,以便大家閱讀,更好的區(qū)分它們的不同
    2016-07-07
  • springboot打包不同環(huán)境配置以及shell腳本部署的方法

    springboot打包不同環(huán)境配置以及shell腳本部署的方法

    這篇文章主要給大家介紹了關(guān)于springboot打包不同環(huán)境配置以及shell腳本部署的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java實現(xiàn)將Object轉(zhuǎn)換成指定Class對象的操作代碼

    Java實現(xiàn)將Object轉(zhuǎn)換成指定Class對象的操作代碼

    這篇文章主要介紹了Java實現(xiàn)將Object轉(zhuǎn)換成指定Class對象的操作,在Java中,將Object轉(zhuǎn)換為指定類型的Class對象實際上是兩個不同概念的操作,由于你提到的“將Object轉(zhuǎn)換成指定Class對象”可能有些混淆,我將分別展示這兩種操作的示例代碼,需要的朋友可以參考下
    2024-09-09
  • Springmvc應(yīng)用Mongodb分頁實現(xiàn)

    Springmvc應(yīng)用Mongodb分頁實現(xiàn)

    這篇文章主要為大家詳細介紹了Springmvc應(yīng)用Mongodb分頁實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • C語言實現(xiàn)矩陣運算案例詳解

    C語言實現(xiàn)矩陣運算案例詳解

    這篇文章主要介紹了C語言實現(xiàn)矩陣運算案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot中的數(shù)據(jù)脫敏處理詳解

    SpringBoot中的數(shù)據(jù)脫敏處理詳解

    本文介紹了在SpringBoot中進行數(shù)據(jù)脫敏處理的方法,通過自定義注解和Jackson配置,可以輕松實現(xiàn)對敏感數(shù)據(jù)的脫敏,保護用戶隱私
    2025-03-03

最新評論

雅江县| 碌曲县| 长垣县| 濮阳市| 赤水市| 新兴县| 连平县| 神农架林区| 柳林县| 北票市| 濉溪县| 保康县| 桐梓县| 明光市| 柳河县| 缙云县| 崇礼县| 牡丹江市| 普宁市| 荥经县| 长治市| 清新县| 治多县| 扬中市| 永胜县| 兰溪市| 石狮市| 贵州省| 叙永县| 唐山市| 阜新市| 林州市| 贵定县| 大丰市| 高淳县| 临夏县| 永新县| 奎屯市| 额济纳旗| 普宁市| 拉孜县|