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

Lock?

멀티스레드를 사용하는 자바에서 lock은 동기화를 지원하기 위해 [Lock]이라는 것을 사용한다.

lock을 사용하기 위한 키워드로는 synchronized와 lock.lock();이 있다.

 

 

synchronized

synchronized는 해당 키워드를 이용해 메소드에서도 사용 가능하고, 블럭으로도 사용할 수 있다.

symchronized는 스레드 하나만 임계영역 지정이 가능해, 너무 세분화해서 lock을 걸면, 오버헤드가 발생할 수 있어서 필요한 부분에만 lock을 사용할 수 있게 주의해야 한다.

 

메소드에서 사용

메소드에 synchronized 키워드를 아래 예제처럼 사용할 수 있다. 

public synchronized void Test(){
	//실행할 코드입력
    //메소드 실행시 임계영역이 되어, 다른 스레드가 접근할 수 없다.
}

 

블럭 사용

synchronized를 블럭으로 사용하려면 객체가 필요하다.

마찬가지로 synchronized 블럭에서 실행하는 코드는 임계영역이다.

synchronized(a){
	//실행 할 코드, 예기서 실행되는건 lock상태이다.
}

 

 

 

lock.lock();

lock.lock();은 lock.unlock(); 구문을 만나기 전까지 lock();을 호출하는 모든 스레드가 임계영역 상태가 된다.

주의할 점은 lock()을 사용할 때 lock을 해제해주지 않으면 계속 임계영역 상태가 되므로 unlock을 반드시 해줘야 한다.

public void Aaa(){
	lock.lock();
    //여기부터 lock 상태
    //실행할 코드들 입력
    //실행할 코드들 입력
    //실행할 코드들 입력
    
    lock.unlock(); //여기부터 lock 해제

}

 

 

반응형

'Develop > Java' 카테고리의 다른 글

[Java] try와 catch  (0) 2023.07.18
[Java] 싱글톤 패턴 : Thread safe & DCL  (0) 2023.07.16
[Java] this. 의미  (0) 2023.06.03
[Java] Concurrent HashMap과 Concurrent List  (0) 2023.05.29
[Java] Atomic과 CAS(Compare and swap)  (0) 2023.05.29
profile

억대 연봉을 위한 인간수업

@회뜨는참치

이 글이 당신에게 조금이라도 도움이 된다면 좋겠습니다.