ThreadLocal
を使用する必要性を理解しようとしています。人々の多くは、ThreadLocal
は、スレッドごとにSimpleDateFormat
を提供するために使用されるべきだと言いますが、ThreadLocal
が使われていないと、どのようにマングルされたSimpleDateFormat
が見られるのかは言及していません。私は次のコードを試してみてください、それはちょうどいいと思われる、私はmangledが表示されませんSimpleDateFormat
。複数のスレッドは、ThreadLocalなしで同じSimpleDateFormatを使用します。
import java.text.SimpleDateFormat;
import java.util.Date;
public class ThreadLocalTest {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
private static final Date TODAY = new Date();
private static final String expected = "07/09/2016";
public static void main(String[] args) {
for (int i = 0; i < 10000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
for (int j = 0; j < 1000; j++) {
String real = dateFormat.format(TODAY);
if (!real.equals(expected)) {
throw new RuntimeException("Mangled SimpleDateFormat");
}
}
}
}).start();
}
}
}
どのように私はThreadLocal
を使用していないので、私はNumberFormatException
のような例外を生成することができますか?
1000回だけ実行し、同期メソッドである 'println'を使用しました。代わりにそれを永遠に実行し、何も印刷せず、期待される文字列と異なる文字列を取得したときに例外をスローします。 –
'parse'メソッドを使うと例外が簡単に見えます。 – user2018791