From 4997808f87bc75fa11e9a867bd50c38032996704 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Wed, 10 Nov 2021 01:19:07 +0900 Subject: [PATCH] spring core advanced : concurrency problem --- spring-core/advanced/build.gradle | 3 ++ .../trace/threadlocal/FieldServiceTest.java | 42 +++++++++++++++++++ .../trace/threadlocal/code/FieldService.java | 25 +++++++++++ 3 files changed, 70 insertions(+) create mode 100644 spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/FieldServiceTest.java create mode 100644 spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/code/FieldService.java diff --git a/spring-core/advanced/build.gradle b/spring-core/advanced/build.gradle index 7e87060a..003353a3 100644 --- a/spring-core/advanced/build.gradle +++ b/spring-core/advanced/build.gradle @@ -23,6 +23,9 @@ dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' + + testCompileOnly 'org.projectlombok:lombok' + testAnnotationProcessor 'org.projectlombok:lombok' } test { diff --git a/spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/FieldServiceTest.java b/spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/FieldServiceTest.java new file mode 100644 index 00000000..cc835c9b --- /dev/null +++ b/spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/FieldServiceTest.java @@ -0,0 +1,42 @@ +package com.example.advanced.trace.threadlocal; + +import com.example.advanced.trace.threadlocal.code.FieldService; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +@Slf4j +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); + threadA.setName("thread-B"); + + threadA.start(); +// sleep(2000); + threadB.start(); + sleep(3000); + log.info("main exit"); + } + + private void sleep(int millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/code/FieldService.java b/spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/code/FieldService.java new file mode 100644 index 00000000..8157b09d --- /dev/null +++ b/spring-core/advanced/src/test/java/com/example/advanced/trace/threadlocal/code/FieldService.java @@ -0,0 +1,25 @@ +package com.example.advanced.trace.threadlocal.code; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class FieldService { + + private String nameStore; + + public String logic(String name) { + log.info("์ €์žฅ name={} -> nameStore={}", name, nameStore); + nameStore = name; + sleep(1000); + log.info("์กฐํšŒ nameStore={}", nameStore); + return nameStore; + } + + private void sleep(int millis) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +}