@Async, TaskExecutor, CompletableFuture

Spring/Core 2023. 6. 17. 18:47

https://docs.spring.io/spring-framework/reference/integration/scheduling.html Task Execution and Scheduling :: Spring Framework All Spring cron expressions have to conform to the same format, whether you are using them in @Scheduled annotations, task:scheduled-tasks elements, or someplace else. A well-formed cron expression, such as * * * * * *, consists of six space-separated time docs.spring.i..

Article Thumbnail
[Java 정리] ThreadLocal

Java 2022. 10. 19. 20:22

java.lang.ThreadLocal 에 대해 알아보자. 쓰레드 로컬은.. 자바에서.. 싱글톤 객체의 필드를 사용하면서, 동시성 문제를 해결하는 방법이다. 각 쓰레드마다 별도의 내부 저장소를 제공하여, 동일한 인스턴스의 로컬 필드에 각 쓰레드가 접근해도 동시성 문제가 없다. 예시를 보며.. 알아보자. ThreadLocalService라는 클래스는 아래 ThreadLocalServiceTest 클래스에서 하나의 인스턴스로 두개의 쓰레드에서 사용된다. ThreadLocal의 String 타입으로 nameStore를 정의하였다. set메서드와 get 메서드 사이 간격은 1초간격이다. ThreadLocal 클래스는 다음과 같은 메서드를 제공한다... ThreadLocal.set(...) : 값 저장에 사용 T..

Article Thumbnail
[Java 정리] Thread 5

Java 2022. 8. 22. 02:20

이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. Lock과 Condition을 이용한 동기화 java.util.concurrent.locks 패키지가 제공하는 lock 클래스들을 이용한 동기화 방법에 대해 알아보자. (JDK1.5) ReentrantLock 클래스 재진입이 가능한 lock, 가장 일반적인 배타 lock이다. 앞서 wait(), notify() 메서드 처럼.. 특정 조건에서 lock을 풀고 나중에 다시 lock을 획득하여 이후의 임계영역 작업을 수행할 수 있다. ReentrantReadWriteLock 클래스 읽기를 위한 lock과 쓰기를 위한 lock을 제공한다. 읽기를 위한 lock이 이미 걸려있는데 다른 쓰레드가 읽고 싶으면 읽기 lock을 중복해서 ..

[Java 정리] Thread 4

Java 2022. 8. 22. 01:21

이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. 쓰레드의 동기화 멀티쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게된다. 따라서, 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요하다. 그래서 도입된 개념이 임계 영역(Critical section)과 락(lock)이다. 공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정해놓고, 공유 데이터(객체)가 가지고 있는 lock을 획득한 단 하나의 쓰레드만 이 영역 내의 코드를 수행할 수 있도록 한다. 그리고 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나서 lock을 반남해야만 다른 쓰레드가 반납된 lo..

[Java 정리] Thread 3

Java 2022. 8. 19. 23:20

이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. 쓰레드의 실행 제어 메서드 쓰레드 상태를 다시 한번 보고 들어가자.. 상태 설명 NEW 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 RUNNABLE 실행 중 또는 실행 가능한(실행 대기) 상태 BLOCKED 동기화 블럭에 의해 일시정지된 상태 (lock이 풀릴 때까지 기다리는 상태) WAITING 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지 상태이다. TIMED_WAITING WAITING와 동일하나 일시정지 시간이 지정된 경우의 일시정지 상태이다. TERMINATED 쓰레드의 작업이 종료된 상태 sleep() 일정 시간 동안 쓰레드를 멈추게 한다. public static native vo..

Article Thumbnail
[Java 정리] Thread 2

Java 2022. 8. 13. 19:30

이미 알던 지식이지만, 기본으로 돌아가서.. Java의 관점에서 한번 정리해보자. 쓰레드 우선순위 쓰레드의 start() 메서드를 호출하기 전에 쓰레드의 우선순위를 정할 수 있다. void setPriority(int newPriority) int getPriority() public static final int MAX_PRIORITY = 10 public static final int MIN_PRIORITY = 1 public static final int NORM_PRIORITY = 5 main 쓰레드의 우선순위는 5 이며, 쓰레드의 우선순위는 쓰레드를 생성한 쓰레드와 동일한 우선순위로 셋팅된다. 멀티 코어 환경에서 두개의 쓰레드로 각각 하나의 작업, 총 두개의 작업을 돌릴 경우엔 당연하게도 우선순..

Article Thumbnail