Middle
რა არის ThreadLocal ცვლადი?
sobes.tech AI
პასუხი AI-სგან
ThreadLocal — бул класс, ал ар бир агым үчүн өзгөчө маалыматтарды сактоого мүмкүнчүлүк берет. ThreadLocal колдонуп жаткан ар бир агым өзүнүн жеке көчүрмөсүнө ээ болот, ал башка агымдардын көчүрмөлөрүнөн изоляцияланган.
Негизги өзгөчөлүктөр жана колдонмолор:
- Маалыматтарды изоляциялоо: Бул көптөгөн агымдардан жалпы өзгөрмө маалыматтарга атака болуудан сактайт, анткени ар бир агым өзүнүн көчүрмөсү менен иштейт.
- Агым аркылуу абалын башкаруу: Веб-колдонмолордо же көптөгөн агымдуу сервистерде учурдагы суроо-талапка байланыштуу маалыматтарды сактоо үчүн пайдалуу (мисалы, колдонуучу ID, транзакциянын контексти), алардын көптөгөн метод чакыруулары аркылуу түздөн-түз өткөрбөстөн.
- Инициализация:
ThreadLocalбиринчи кирүүдөinitialValue()методу аркылуу жеset()аркылуу маанини түздөн-түз орнотуу менен инициализацияланат. - Өмүр цикли:
ThreadLocalичинде сакталган маалыматтар агымдын өмүрүнүн бүтүндөй мөөнөтүндө же алардын ачык түрдө жоюлгуча жеткиликтүү (методremove()аркылуу).
Колдонуу мисалы:
// Учурдагы агымдын атын сактоо үчүн `ThreadLocal` түзүү
private static final ThreadLocal<String> threadName = new ThreadLocal<String>() {
@Override
protected String initialValue() {
// Биринчи кирүүдө маанини инициализациялоо
return Thread.currentThread().getName();
}
};
public void processRequest() {
// Учурдагы агым үчүн маанини орнотуу
threadName.set("RequestProcessor-" + Thread.currentThread().getId());
// Учурдагы агым үчүн маанини алуу
String currentThreadName = threadName.get();
System.out.println("Processing request in thread: " + currentThreadName);
// Эстутүүчү жоготпоо үчүн маанини жоюу, өзгөчө агым пулдарында
threadName.remove();
}
Маанилүү: колдонгондон кийин remove() чакыруусу керек, өзгөчө агым пулдарында, мээнин агып кетишин алдын алуу үчүн, анткени агым кайра колдонулушу мүмкүн жана ThreadLocal эски мааниси ага байланыштуу калат.