본문 바로가기

Multi Thread

(2)
JPA - LazyInitializationException No Session(다중 스레드 트랜잭션,Multi Thread Transaction) Spring boot + JPA 환경에서 개발중 멀티스레드 환경에서 JPA를 사용하면서 겪었던 문제이다. 우선 원인은 멀티 스레드 환경에서 트랜잭션의 공유가 안되는 문제였다. [상황] CompletableFuture.runAsync()를 사용하여 Multi Thread 환경에서 JPA를 사용하는 상황이었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public Object controllerMethod(@PathVariable long id, Locale locale) { CompletableFuture.runAsync(()->{ service.method(id); },executor) .exceptionally(e->{ log.debug("CompletableFuture.runAsyn..
java - synchronized 란? 사용법? java - synchronized 란? 사용법? 멀티스레드를 잘 사용하면 프로그램적으로 좋은 성능을 낼 수 있지만, 멀티스레드 환경에서 반드시 고려해야할 점인 스레드간 동기화라는 문제는 꼭 해결해야합니다. 예를 들어 스레드간 서로 공유하고 수정할 수 있는 data가 있는데 스레드간 동기화가 되지 않은 상태에서 멀티스레드 프로그램을 돌리면, data의 안정성과 신뢰성을 보장할 수 없습니다. 따라서 data의 thread-safe 를 하기 위해 자바에서는 synchronized 키워드를 제공해 스레드간 동기화를 시켜 data의 thread-safe를 가능케합니다. 자바에서 지원하느 Synchronized 키워드는 여러개의 스레드가 한개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는 해당 스레드를..