์ฑ๊ธํค์ผ๋ก ๋ฑ๋ก๋ FieldLogTrace ๋น์์ ์ธ์คํด์ค์ ํ๋, ๋๋ static ๊ฐ์ ๊ณต์ฉ ํ๋์ ๋์์ ์ ๊ทผํ ๋ ๋ฐ์
ํ ์คํธ ์ฝ๋ ์์
public class FieldServiceTest {
private FieldService fieldService = new FieldService();
@Test
void field() {
log.info("main start");
Runnable userA = () -> {
fieldService.logic("userA");
};
Runnable userB = () -> {
fieldService.logic("userB");
};
Thread threadA = new Thread(userA);
threadA.setName("thread-A");
Thread threadB = new Thread(userB);
threadB.setName("thread-B");
threadA.start();
sleep(100);
threadB.start();
sleep(3000);
log.info("main exit");
}
}
๊ฐ ์ฐ๋ ๋๋ง๋ค ๋ณ๋์ ๋ด๋ถ ์ ์ฅ์ ์ ๊ณต
๊ฐ์ ์ธ์คํด์ค์ ์ฐ๋ ๋ ๋ก์ปฌ ํ๋์ ์ ๊ทผํด๋ ๋ฌธ์ ์์
public class ThreadLocalService {
private ThreadLocal<String> nameStore = new ThreadLocal<>();
public String logic(String name){
log.info("์ ์ฅ name={} -> nameStore={}", name, nameStore.get());
nameStore.set(name);
sleep(1000);
log.info("์กฐํ nameStore={}", nameStore.get());
return nameStore.get();
}
}
WAS์ ์ฐ๋ ๋ ํ์์ thread-A๋ ์ด์์๋ค
๋ฐ๋ผ์, ์ฌ์ฉ์ A์์ฒญ์ด ๋๋ ๋ ์ฐ๋ ๋ ๋ก์ปฌ์ ๊ฐ์ ThreadLocal.remove()๋ฅผ ํตํด ์ ๊ฑฐํด์ผ ํ๋ค
| [ํจํค์ง๋ฐ๋ฐฐํฌ] Jar vs War (0) | 2024.12.21 |
|---|---|
| [Spring] @Transactional (0) | 2024.12.13 |
| [์คํ๋ง] AOP์ @Transactional (0) | 2024.11.27 |
| [Spring] Spring IoC Container, BeanScan, ์๋ช ์ฃผ๊ธฐ, ์ค์ฝํ (0) | 2024.11.20 |
| [๋ฐ์ดํฐ๋ฒ ์ด์ค]JPQL : N + 1 ๋ฌธ์ , Fetch Join, ์ฃผ์์ฌํญ (0) | 2023.07.11 |