Guava striped lock
자료구조(ex. Array나 HashMap) 전체를 Lock하는 것이 아니라 보다 세밀하게 Lock(fine-grained lock)을 적용하는 케이스
알아야 하는 개념은 무엇인가?
그래서??
목적
Assuming each one is distinct, we use a “striped” approach where access to each URL is limited to N threads at a time, increasing the throughput and responsiveness of the application. (원문: 참조3)
Guava에서 제공하는 Striped Lock 지원 클래스 사용..
Striped<Semaphore> stripedSemaphores = Striped.lazyWeakSemaphore(10, 1);
상세한 설명은 참조 자료 보고 이해하기^^ (생략..)
테스트 해보기
간단하게 HashMap에 count를 세는 클래스 만들기
코드는 여기 참조
결과를 보면, Striped 적용 안한 예제에서는 멀티 쓰레드 테스트에서 자기 맘대로 count가 세짐
19, 3
17, 2
18, 1
15, 1
16, 0
13, 3
14, 0
11, 1
12, 1
3, 3
2, 1
10, 0
1, 4
0, 1
7, 3
6, 0
5, 3
4, 2
9, 1
8, 0
Striped lock 적용하면 정확하게 count가 들어감!
19, 4
17, 4
18, 4
15, 4
16, 4
13, 4
14, 4
11, 4
12, 4
3, 4
2, 4
1, 4
10, 4
0, 4
7, 4
6, 4
5, 4
4, 4
9, 4
8, 4
참조
- http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/Striped.html
- https://code.google.com/p/guava-libraries/wiki/StripedExplained
- http://java.dzone.com/articles/fine-grained-concurrency-guava