반응형
자바에서 2개의 Lock이 있는데
첫번째는
자바에서 thread간 동기화를 위해 synchronized 키워드를 사용하는것을 사용 합니다.
이런 synchronized 키워드를 사용하는 lock을 Intrinsic Lock 또는 Built-in Lock이라고 한다.
// Mutual Exclusion
public synchroized void intrinsicLockfunc(){
...
}
// Wait
synchronized(this){
...
this.wait();
...
}
// signal
synchronized(this){
...
this.notify();
...
}
두번째는
Java 1.5에서 java.util.concurrent.locks 패키지를 통해 제공되는 Explicit Lock이 있다.
// Mutual Exclusion
public void ExplicitLockFunc(){
lock.lock();
try{
...
}catch(Exception e){
...
} finally{
lock.unlock();
}
}
// wait
Condition condition = lock.newConditition();
lock.lock();
try{
condition.await();
}catch(Exception e){
...
} finally{
lock.unlock();
}
// signal
Condition condition = lock.newConditition();
lock.lock();
try{
...
condition.signal();
}catch(Exception e){
...
} finally{
lock.unlock();
}
Tip. 성능적인 면에서 Lock Contention이 자주 발생하지 않는다면 Intrinsic Lock을 사용.
자주 발생한다면 Explicit Lock 사용.
반응형
'Language > Java' 카테고리의 다른 글
Runnable과 Callable의 차이는? (0) | 2021.03.18 |
---|---|
AtomicInteger&LongAdder&Thread-Safe (0) | 2020.12.01 |
Error parsing HTTP request header 에러 (0) | 2018.04.05 |
/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory (0) | 2016.10.27 |
자바 예외처리를 생각해보자. (0) | 2016.09.26 |