Java 42

Java volatile

java에서 volatile 키워드는 스레드들 사이에서 변수에 저장된 값을 변경하는 것에 대한 가시성을 보장합니다 여기서 가시성이란 최신 상태를 유지 하고 변경된 값을 즉시 읽을수 있도록 보장한다는 말이다.     Using Cache in Multi CPUPermalink여러 개의 CPU를 사용하는 멀티 스레드 환경에서 데이터 동기화 문제가 발생합니다.각 CPU들이 각자의 스레드를 실행합니다.어플리케이션의 같은 변수를 사용하지만, CPU 캐시에 데이터를 로딩해서 사용합니다.   1.1. Data not matched between main memory and cpu cachePermalinkCPU1은 Thread1을 실행합니다.CPU2는 Thread2를 실행합니다.CPU1은 Thread1을 수행하면서 ..

Java 2024.11.15

CompletableFuture에 대해서

CompletableFuture는 Java 8에서 도입된 비동기 프로그래밍을 위한 클래스입니다. 이 클래스는 비동기 작업을 수행하고 그 결과를 비동기적으로 처리할 수 있는 메커니즘을 제공합니다. 기존의 Future 인터페이스의 단점을 보완하여, 비동기 작업의 결과를 쉽게 조합하고 체이닝(Chaining)할 수 있도록 설계되었습니다.  [ Future의 단점 및 한계 ]CompletableFuture가 갖는 작업의 종류는 크게 다음과 같이 구분할 수 있는데, 이에 대해서는 자세히 코드로 살펴보도록 하자.비동기 작업 실행작업 콜백작업 조합예외 처리   비동기 작업 실행runAsync반환값이 없는 경우비동기로 작업 실행 콜supplyAsync반환값이 있는 경우비동기로 작업 실행 콜  runAsync는 반환 값..

Java 2024.11.15

Java에서 dead lock이란 무엇인가요?

데드락이란? 멀티 스레드 환경에서 일어날수 있는 현상이다. 동기화를 통해 락을 획득하여 동일한 자원을 여러 곳에서 함부로 사용하지 못하도록 한다.하지만 두 개의 스레드에서 서로 락이 해제 되길 기다리는 상태가 생길수 있으면 이 내용을 교착상태(deadlock) 이라고 합니다.   DeakLock 발생 조건상호 배제 (Mutual Exclusion) :  한 자원에 대해 여러 쓰레드 동시 접근 불가점유와 대기 (Hold and Wait) : 자원을 가지고 있는 상태에서 다른 쓰레드가 사용하고 있는 자원 반납을 기다리는 것비선점 (Non Preemptive) : 다른 쓰레드의 자원을 실행 중간에 강제로 가져올 수 없음환형대기 (Circle Wait) : 각 쓰레드가 순환적으로 다음 쓰레드가 요구하는 자원을 ..

Java 2024.11.14

ThreadLocal vs synchronized 차이점

멀티 스레드 환경에서 동시성 이슈는 자주 일어난다. 자바에서 synchronized 와 약간 비슷한 공통점도 있지만 성격 자체가 다르다. 공통점은 동시성 관련 내용을 해결해주지만 동작 방식이 완전 다르다. 1. synchronizedsynchronized는 객체 공유를 제어 하는 역할이다.여러 스레드가 동일한 객체를 접근할때 블로킹을 통해 안전성을 보장한다.동기화 비용이 있어서 블로킹으로 인해 성능 저하가 있을수도 있습니다. 2. ThreadLocalThreadLocal는 각 독립적인 스레드의 값을 가지게 한다. 스레드 마다 고유의 값을 보장한다.각 스레드에 고유의 값을 저장한다.동기화를 신경 쓸일 없어서 성능적으로 높지만 메모리 소모가 많을수도 있다. 동시성 문제 해결 측면에서의 차이synchroniz..

Java 2024.11.12

Monitor

모니터란? mutual exclusion(상호 배제) – 하나의 스레드만이 특정한 시점에 메서드를 실행할 수 있습니다. locks기법을 사용합니다.cooperation – 특정 조건이 충족될 때까지 스레드를 대기시키는 기능. wait-set을 사용합니다.해당 기능은 모니터라고 하는 이유는 모니터는 스레드 리소스에 어떻게 접근 하는지 모니터링 하기 때문입니다. 모니터의 특징모니터는 동시성 프로그래밍에 세 가지 주요 기능을 제공합니다:한 번에 하나의 스레드만 critical code section에 mutually exclusive(상호 배제적)으로 접근할 수 있습니다.모니터에서 실행 중인 스레드가 특정 조건이 충족될 때까지 차단될 수 있습니다.스레드는 조건이 충족될 때 다른 스레드에 알릴 수 있습니다.  ..

Java 2024.11.12

Thread와 Process의 차이

프로세스란.. 하나의 실행 단위를 이야기한다. 프로세스 전엔 프로그램이다 즉 메모리 영역엔 아직 안올라간 파일이다.프로그램을 실행하면 그 즉시 프로세스는 동작 한다. 이 상태를 동적인 상태라고 하는데 프로그램을 프로세스라고 하낟.프로세스 정의를 내일떄 실행되고 있는 컴퓨터 프로그램이라고 한다.    프로세스와 스레드의 작동 방식에 대한 더 자세한 설명위에서 프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다고 언급했었다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.   이와 다르게 스레드는 메모리를 서로 공..

Java 2024.11.09

링크드 리스트 자료구조

링크드 리스트(Linked List) 내가 이해 하기론 링크드 리스트는 각 요소가 데이터와 다음 요소를 참조하는 정보를 포함하는 노드로 구성된다.   단순한 링크드 리스트는 뒤에값만 아는걸로 되어 있고 더욱 보안해서 나온 링크드 리스트는 양방향 링크드 리스트 ( doubly linked list) 마지막 노드가 처음 노드를 참조하는 형태인 원형 링크드 리스트(circular linked list) 등이 있다.   단방향 연결   해당 linked list 값이 0 ,1, 2, 3, 4 값이 있다면 0값은 그 뒤에 1이 있는걸 알고 2값 뒤엔 2가 있는거로 알고 2값 뒤엔 3이 있는걸 알고 있는 단 방향 연결값이다. 만약에 100000개의 값이 있다면 0에서 ---> 쭉쭉쭉 올라가서 99999개의 값까지 ..

Java 2024.11.08

자바 리플렉션(reflection)에 대해서 찾아보기

자바 리플렉션으로 예전에 잘못된 코드를 작성한적이 있다... 정확하는 리플렉션으로 엑셀 업로드시 벨리데이션 체크 로직을 구현 해본적이 있다. 분리 개념으로 작성 했다가 결국 나중에 찾아보니.. 동작 메소드 호출이고 런타임때 동작하는 코드로 어떤 오류가 나는지 추적 하기가 어려웠다. 제일 좋은 오류는 컴파일 오류인데.. 아무튼 서론이 길었다.  리플렉션은  힙 영역에 로드 된 Class 타입의 객체를 통해, 접근 제어자 상관없이 원하는 클래스의 정보에 접근해서 조작할 수 있도록 지원하는 API이다. 조작할수 있는건 어느정도 전부 조작이 가능한거 같다.필드, 메소드, 생성자등등 제가 생각하는 장점이라고 하면  1. 높은 유연성이 가지고 있다. - 어디에 국한 되지 않고 자바 리플렉션을 이용하면 단번에 가져올..

Java 2024.11.08