억대 연봉을 위한 인간수업
반응형
[Java] Lock에 대해서
Develop/Java 2023. 7. 19. 00:13

Lock? 멀티스레드를 사용하는 자바에서 lock은 동기화를 지원하기 위해 [Lock]이라는 것을 사용한다. lock을 사용하기 위한 키워드로는 synchronized와 lock.lock();이 있다. synchronized synchronized는 해당 키워드를 이용해 메소드에서도 사용 가능하고, 블럭으로도 사용할 수 있다. symchronized는 스레드 하나만 임계영역 지정이 가능해, 너무 세분화해서 lock을 걸면, 오버헤드가 발생할 수 있어서 필요한 부분에만 lock을 사용할 수 있게 주의해야 한다. 메소드에서 사용 메소드에 synchronized 키워드를 아래 예제처럼 사용할 수 있다. public synchronized void Test(){ //실행할 코드입력 //메소드 실행시 임계영역이 ..

[Java] try와 catch
Develop/Java 2023. 7. 18. 23:48

try와 catch문은 예외처리를 할 때 사용하는 구문이다. 예외처리? 프로그램 실행 중 오류, 예외(Exception)이 발생한 경우 프로그램이 강제종료 되지 않고 정상 처리될 수 있게 하는 방법 try-catch-finally 예시 try{ //예외가 발생할 수 있는 코드 }catch(Exception exception){ //Exception이 발생했을때 처리하기 위한 코드를 입력 //보통 예외 메세지를 출력하고 로그로 남긴다. //exception은 참조 변수를 의미 }catch(Exception2 exception2){ //Exception2가 발생했을때 처리하기 위한 코드 입력 }finally{ //예외 발생과 관계 없이 반드시 실행되는 코드를 넣는다 } 예제를 보면 알 수 있듯이 try에 코..

[Java] 싱글톤 패턴 : Thread safe & DCL
Develop/Java 2023. 7. 16. 15:44

멀티 스레드가 가능한 자바에서 singleton 패턴을 사용할 때, Thread safe singleton을 많이 사용한다. Thread safe가 필요한 이유는 멀티 스레드를 구현할 때 스레드를 사용하는 도중 문제가 일어나지 않게 하기 위해서 이며, 동기화를 위해 사용한다. 이걸 패턴으로 구현한게 Thread safe singleton 이다. Thread safe singleton class Singleton { private static Singleton singleton; private Singleton() {} public static synchronized Singleton getInstance() { if (singleton == null) { singleton = new Singleton()..

[Java] this. 의미
Develop/Java 2023. 6. 3. 14:22

자바에서 this. 는 뭘 의미할까? this. 는 인스턴스 맴버를 가리킨다 this. 는 자신을 가리키는 키워드, 자신의 객체에 접근할 때 사용 그러니까 필드(전역변수)를 명확히 구분하기 위해서 사용 클래스 맨위에 전역변수로 선언된 그 변수 변수의 이름이 동일할 때 구분하기 위해 사용! 변수 이름이 같을때 구분하기 위해 this를 붙인다. 매소드의 인자값으로 받는것과 this. 변수는 다르다 인스턴스 맴버? 자기가 가지고 있는 필드 및 메소드를 의미한다. this. 사용 예시1 public class Test{ int a; //인스턴스 필드 public Test(int a) //

[Java] Concurrent HashMap과 Concurrent List
Develop/Java 2023. 5. 29. 22:15

java는 멀티 스레드를 지원하는 언어이다. 그러다 보니 싱글 스레드에서 최적화된 접근이 있고, 멀티 스레드에서 사용하기 위한 방법도 존재한다. 여기서 멀티 스레드 환경에서 어떤 함수나 변수, 객체가 여러 스레드로부터 동시에 접근이 일어나도 프로그램 실행에 문제가 없는 Thread-safe를 고려한 자료형이 존재한다. ConcurrentHashMap이란? 멀티 스레드 환경에서도 사용할 수 있게 나온 클래스로, 동시성을 높이기 위해 나온 클래스 hashTable과 synchronized map 보다 더 나은 성능을 가지고 있다 왜냐면 concurrentHash Map 은 map의 일부에만 lock을 걸고, hashTable과 Synchronized는 map 전체에 lock을 걸기 때문 사용 예시 1 pub..

[Java] Atomic과 CAS(Compare and swap)
Develop/Java 2023. 5. 29. 21:54

java는 멀티 스레드(Multi-Thread) 프로그래밍이 가능한 언어이다. 동시에 여러 가지 일을 할 수 있도록 하는 멀티 스레드, 그리고 스레드는 자바의 중요한 특성인데 cpu의 사용률을 높이기 위해 사용한다. 멀티 스레드 구현을 효과적으로 하기 위해 Atomic과 CAS 같은 개념이 사용된다. Atomic synchromized는 lock을 사용해 다른 스레드가 wating 하는 상황이 발생한다. 이걸 해결하기 위해 non-blocking한 방법으로 Atomic연산 사용 Atomic연산의 핵심 원리가 바로 CAS(Compare and swap)이다 atomin 자료형은 기본 자료형의 동기화를 보장해주는데 내부에서 CAS 알고리즘을 사용 atomic 변수는 멀티 스레드 환경에서 원자성을 보장해주기 ..

article thumbnail
[Java] Synchronized 동기화 예제
Develop/Java 2023. 5. 14. 20:50

멀티 스레드를 잘 사용하기 위해선 동기화 문제를 해결해야 한다. Java에선 멀티 스레드를 지원하기 위한 구현체를 제공하는데 그 중 Synchronized를 사용하여 동기화와 Critical Section을 사용해보자. 멀티스레드의 동기화를 사용하지 않을 경우 멀티스레드를 구현하는 데 동기화를 사용하지 않는 예제 코드는 아래와 같다. Thread를 두 개 만들어 멀티 스레드를 구현한 다음, CountCheck의 더하기를 멀티스레드로 실행한다. Main package org.example; public class Main { public static void main(String[] args) { TaskRunnuble taskR = new TaskRunnuble(); Thread th1 = new Thr..

[Java] Synchronized VS Reentrant 차이
Develop/Java 2023. 5. 14. 15:47

자바는 stack, heap, static 이라는 3개의 메모리 영역을 가지고 있다. 자바 멀티 스레드 환경은 스레드들끼리 static, heap영역을 공유하기 때문에 공유 자원에 대한 동기화 문제를 신경 써야 한다. 자바는 java.util.concurrent.lock 패키지를 통해 Lock 외의 직접 동기화 구현이 가능한 lock 구현제를 제공하는데, 여기에 Synchronized와 Reentrant 등의 클래스가 존재한다. 이 둘의 차이점은 아래와 같다. synchronized와 Reentrant 차이 Synchronized 현재 데이터를 사용하고 있는 해당 스레드를 제외한 나머지 스레드들이 데이터에 접근 불가하도록 하는 개념 자바에서 스레드 동기화 시 사용하는 대표적인 기법 synchronized..

article thumbnail
[Java] Thread란?
Develop/Java 2023. 5. 14. 14:24

Process & Thread & Fork Process 프로세스란? cpu에 의해 메모리에 올라가 실행 중인 프로그램 메모리 공간을 포함한 독립적인 실행 공간을 갖는다. JVM(java virtual Machine)은 하나의 프로세스로 실행되며, 동시에 여러 작업을 수행하기 위해 멀티 쓰레드를 지원한다. Thread 쓰레드란? 프로세스의 자원을 이용해 실제 작업을 수행하는 주체 java에서는 JVM에 의해 관리된다. 프로세스 안에서 한 개 이상의 쓰레드가 작업을 하는데, 1개면 단일 쓰레드, 2개 이상이면 멀티 쓰레드라 한다. 스택을 제외한 프로세스의 모든 섹션을 공유하는 경량 프로세스 thread는 fork의 비효율성을 극복하기 위해 사용 fork 프로세스를 복제하는 것으로 새로운 프로세스를 만드는 ..

반응형