#java #multithreading #thread-safety
#java #многопоточность #безопасность потоков
Вопрос:
Существует класс с именем Data
, который называется мои другие классы. Data
доступ к классу осуществляется многими потоками, я хочу сохранить некоторую информацию в каждом потоке. В частности, у Data
есть экземпляр с именем name
(String), я хочу сохранить это name
в потоке, который создает объект данных.
В дальнейшем я хотел бы получить доступ, name
получив currentThread()
что-нибудь еще в коде.
Я очень новичок в Java, возможно ли это?
Комментарии:
1. Итак, вы создаете уникальные данные объекта для каждого потока и имеете контейнер, или вы собираетесь создать этот объект, а затем запустить потоки, все обращающиеся к одному и тому же объекту? Это звучит как первоначальный способ
2. Если вы хотите, чтобы каждый поток имел свое собственное имя (типа String), то почему бы не использовать один из конструкторов потоков Thread(имя строки) или Thread (Runnable, строка). docs.oracle.com/javase/6/docs/api/java/lang /…
3. Первый способ — уникальные данные для каждого потока.
4. @batman: Если это уникальные данные (предположим, вы имеете в виду объект) для каждого потока, то о безопасности потоков речи не идет. Потокобезопасность может быть применена только тогда, когда ОДИН объект данных является общим для всех потоков.
Ответ №1:
Вашему объекту данных может потребоваться наличие полей-членов типаhttp://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html если я правильно читаю ваш вопрос. Поля-члены, которые являются локальными по потоку, будут иметь разное значение в зависимости от потока, обращающегося к нему.