Я пытаюсь понять необходимость использования ThreadLocal
. Многие люди упоминают, что ThreadLocal
следует использовать для потоковой передачи SimpleDateFormat
, но они не упоминают, как будет выглядеть искаженный SimpleDateFormat
, если ThreadLocal
не используется. Я пробую следующий код, кажется, все в порядке, я не вижу искаженного SimpleDateFormat
.Несколько потоков используют один и тот же SimpleDateFormat без ThreadLocal
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();
}
}
}
Как я могу произвести исключение как NumberFormatException
, потому что я не использую ThreadLocal
?
вы запускали его всего лишь 1000 раз и использовали 'println', который является синхронизированным методом. Вместо этого запустите его навсегда, ничего не печатайте и бросайте исключение, когда вы получаете строку, отличную от ожидаемой. –
Кажется, что если я использую метод 'parse', я бы смог легко увидеть исключение. – user2018791