Javaの日付パターンが多数あり、速度のために静的参照を使用して異なるスレッド間でSimpleDateFormat
オブジェクトに何度も再利用したいと考えています。SimpleDateFormatへのマルチスレッドアクセスのThreadLocal
コードは、この(FormatClass
、たとえば、というクラス内)のようなものになります。次のように
private static String[] PATTERNS = new String[] {...};
public ThreadLocal<SimpleDateFormat[]> LOCAL_FORMATS = new ThreadLocal<SimpleDateFormat[]>
{
@Override
protected SimpleDateFormat[] initialValue()
{
List<SimpleDateFormat> formatList = new ArrayList<SimpleDateFormat>();
for (String pattern:PATTERNS)
{
formatList.add(new SimpleDateFormat(pattern);
}
return formatList.toArray(new SimpleDateFormat[0]);
}
}
、別のクラスでしformat
(またはparse
)上のメソッドの複数の日付文字列を:printFormatted()
方法は、または静的であってもなくてもよいが、明確に異なる複数のスレッドによってアクセスされる
public static void printFormatted(String date)
{
for (SimpleDateFormat sdf:FormatClass.LOCAL_FORMATS.get())
{
System.out.println(sdf.format(date));
}
}
。
上記のアプローチは期待どおりに機能しますか?
'toArray'メソッドを使うときは、[' new SimpleDateFormat [list.size()] ']を使う方が効率的です(http://stackoverflow.com/questions/174093/toarraynew-myclass0-or- toarraynew-myclassmylist-size)である。 – Jeffrey
いいえ、toArray()メソッドのソースコードを見ると、まったく同じです。 – PNS
私があなたに与えたリンクを読んでください。まったく同じではありません。最初はリスト全体を格納するのに十分な大きさの配列を指定すると、その配列が使用されます。そうしないと、まったく新しい配列を割り当てて正しい型にキャストする必要があります。 – Jeffrey