티스토리 뷰
synchronized
여러 thread가 동시에 접근하는것을 막아주는 예약어이다.
synchronized 예약어가 붙으면 thread에서 해당 예약어가 붙은 메소드나 필드에 접근할 때 lock이 잡히고, lock이 풀릴때 까지 다른 thread가 접근할 수 없다.
synchronized는 성능을 저하시키므로 synchronized를 적용할때는 적용되는 부분을 최소화 해야 한다.
EX :
아래 예제는 synchronized가 어떻게 동작하는지 잘 보여주는 예제이다.
doA는 synchronized가 없이 t0, t1 쓰레드가 경쟁적으로 doA() 메소드를 호출한다.
doA를 주석처리하고 doB의 주석을 풀면 먼저 doB() 메소드를 점유한 쓰레드의 작업이 끝날때까지 다른 쓰레드가 doB() 메소드를 호출할 수 없다.
synchronized가 적용되면 결과가 어떻게 달라지는지 확인할 수 있다.
synchronized 키워드는 예제처럼 메소드에 사용할 수 있고, synchronized {} 같이 코드의 특정 부분만을 block 형태로 사용할수도 있다. 상황에 맞게 사용하자.
'Programming > Java' 카테고리의 다른 글
Java Memory Structure (3) | 2016.08.20 |
---|---|
Enum (0) | 2016.08.17 |
정렬 (Comparable, Comparator, Ordering) (0) | 2016.08.16 |
Serializable (0) | 2016.08.15 |
Equlas & HashCode (0) | 2016.08.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- @Primary
- Registrar
- DI
- 복합키 Mapping
- RetryTemplate
- Spring Registrar
- java Equals
- Akka
- Sprint RetryTemplate
- Property
- java generic
- docker
- Spring JDBC Template
- Join Table
- Typesafe Config
- JPA Criteria
- Criteria
- Embedded Mapping
- Query DSL
- Embeddable Mapping
- Discriminate Mapping
- Mapping
- Charles proxy
- java EqualsAndHashCode
- Spring
- scikit-learn
- spring spel
- JPA
- SmartLifecycle
- guava
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함