일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬 강좌
- play2 강좌
- Akka
- Play2
- 그라파나
- 스칼라
- 하이브리드앱
- 안드로이드 웹뷰
- play 강좌
- 주키퍼
- 파이썬 데이터분석
- 파이썬 동시성
- akka 강좌
- 파이썬
- 블록체인
- 엔터프라이즈 블록체인
- Golang
- 플레이프레임워크
- Adapter 패턴
- 이더리움
- Hyperledger fabric gossip protocol
- 스칼라 강좌
- 하이퍼레저 패브릭
- hyperledger fabric
- 파이썬 머신러닝
- Actor
- 스위프트
- CORDA
- 스칼라 동시성
- Play2 로 웹 개발
- Today
- Total
HAMA 블로그
JAVA 쓰레드풀의 상태관리 본문
* 코딩 스킬적으로 하나의 int 변수 안에 길이가 다른 다양한 특성을 담아둘때 이런 기법을 이용하시면 된다.
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); // RUNNING 상태와 쓰레드 개수1로 초기화
private static final int COUNT_BITS = Integer.SIZE - 3;
private static final int CAPACITY = (1 << COUNT_BITS) - 1; // 00011111 11111111 11111111 11111111
// runState is stored in the high-order bits
private static final int RUNNING = -1 << COUNT_BITS; // 11100000 00000000 00000000 00000000
private static final int SHUTDOWN = 0 << COUNT_BITS;
private static final int STOP = 1 << COUNT_BITS;
private static final int TIDYING = 2 << COUNT_BITS;
private static final int TERMINATED = 3 << COUNT_BITS;
private static int ctlOf(int rs, int wc) { return rs | wc; } // 2가지 상태를 하나의 Int 로 합쳐주는 함수
첫째. workerCount - 현재 워커(쓰레드) 의 개수 (앞의 3비트 이용)
workerCount 는 0 이고 runState 는 RUNNING 이라는 것이다. 앞쪽비트는 runState 로 사용하고, 뒤쪽 비트는 workerCount 로 사용 한다는 것인데, 맞는지 확인 해보자.
(1<< 29) - 1 = 2^29 -1 = 536870911 = 0x1FFFFFFF = 00011111 11111111 11111111 11111111
private static final int COUNT_BITS = Integer.SIZE - 3; // 32-3 = 29
private static final int CAPACITY = (1 << COUNT_BITS) - 1; // 00011111 11111111 11111111 11111111
private static int workerCountOf(int c) { return c & CAPACITY; } // 현재 워커 갯수는?
int c = ctl.get();
int ws = workerCountOf(c); // ws 는 0
'Java' 카테고리의 다른 글
초보의 좌충우돌 한글 인코딩 (euc-kr 에서 UTF-8) 삽질기 (0) | 2020.10.11 |
---|---|
JAVA 쓰레드풀 분석 - newFixedThreadPool 는 어떻게 동작하는가? (0) | 2018.03.06 |
Java 에서 리소스 관리하기 ARM&EAM 패턴 (feat.Scala) (0) | 2018.03.05 |
[Java 8] 인터페이스 vs 추상 클래스 (0) | 2016.09.30 |
[옛날 Java] 인터페이스 vs 추상클래스 (0) | 2016.09.14 |