метод get и initialValues ​​для ThreadLocal синхронизирован - PullRequest
0 голосов
/ 26 сентября 2011

Я наткнулся на код, в котором методы get () и initialValue () из ThreadLocal синхронизированы.

Я не смог найти никакого применения для синхронизации этих методов.Поправь меня, если я ошибаюсь.

-Кришна.

Ответы [ 3 ]

2 голосов
/ 16 октября 2015

Я исследовал то же использование синхронизированных в ThreadLocal initialValue ().Ответ Факрудина включает ссылку на дефект Java 1.5, в котором синхронизированное ключевое слово было обходным путем для создания нескольких объектов.Это было исправлено в Java 1.6

Если вы запустите этот тест (взятый из ссылки Факрудина) в Java 1.5 и сравните свои результаты с более поздней версией, вы увидите, что в версиях 1.6 и более поздних синхронизировать не нужно,

---------- BEGIN SOURCE ---------- import java.util.ArrayList;

открытый класс ThreadLocalBug {static int COUNT = 8;

static ThreadLocal tl = new ThreadLocal() {
    protected Object initialValue() {
        System.err.println("initialValue called");
        ArrayList list = new ArrayList(COUNT);
        for (int i = 0; i < COUNT; i++) {
            MyThreadLocal mtl = new MyThreadLocal();
            mtl.get();
            list.add(mtl);
        }
        return list;
    }
};

public static void main(String[] args) throws Throwable {
    Object first = tl.get();
    Object second = tl.get();
    Object third = tl.get();
    System.err.println("first=" + first);
    System.err.println("second=" + second);
    System.err.println("second=" + third);
}

static class MyThreadLocal extends ThreadLocal {
    protected Object initialValue() {
        return Boolean.TRUE;
    }
}

}

---------- ИСТОЧНИК КОНЦА ----------

(я бы добавилэто как комментарий к ответу Факрудина, но мне не хватает очков :-))

1 голос
/ 18 апреля 2014
0 голосов
/ 20 ноября 2011

Нет, это совершенно бессмысленно и, вероятно, было написано кем-то, кто не знал, что они делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...