volatile은 멀티 스레드 프로그래밍에 사용되는 키워드입니다. 스레드는 실행되고 있는 CPU메모리 영역에 데이터를 캐싱합니다. 따라서 멀티 코어 프로세서에서 다수의 스레드가 변수 a를 공유하더라도 캐싱된(갱신) 시점에 따라 데이터가 다를 수도 있습니다. 그리고 캐싱된 데이터가 언제 갱신되는지 정확히 알수 없습니다. 멀티코어 환경에서 스레드1, 2가 변수a(counter 성격의 가변 데이터)를 공유하고 있다고 가정해 봅시다. 1번 스레드가 a=2를 할당한 이후에 2번 스레드가 a를 읽더라도 가장 최신값 2가 아닌 이전에 캐싱된 값을 읽어올 수 있습니다. 이런 경우 volatile키워드를 사용하여 CPU메모리 영역에 캐싱된 값이 아니라 항상 최신의 값을 가지도록 메인 메모리 영역에서 값을 참조하도록 할 ..
Hikari 소스를 까 보던 중 동기화와 관련된 좋은 코드가 있어서 소개합니다. 그전에 일단 DataSource에 대해서 좀 알아보겠습니다. DataSource를 사용하면 getConnection메소드를 통해 커넥션을 얻어 옵니다. public interface DataSource extends CommonDataSource, Wrapper { Connection getConnection() throws SQLException; .. 보통 DB당 DataSource 객체를 하나만 생성하기 때문에 DataSource는 다수의 스레드에 의해 공유됩니다. 따라서 커넥션을 얻기 위해 getConnection메소드를 호출할 때마다 스레드 간 경합이 발생하게 됩니다. 그런데 getConnection메소드에는 커넥션..
- Total
- Today
- Yesterday
- 상속과 구성
- 자바 tcp
- RedisAutoConfiguration
- 사천성 알고리즘
- 자바 클라이어트 소켓
- 자바 전문통신
- java socket
- 바이트 기반 서버
- socket readtimeout
- 클라이언트 소켓
- client socket util
- 클라이언트 소켓 유틸
- 자바 동기화
- 자바소켓
- 자바 TCP 서버
- 소켓통신
- 자바 전문서버
- 자바 사천성
- 추상 팩토리 패턴
- neso
- java socket util
- 자바 온라인 사천성
- socket connection timeout
- 디자인 패턴
- 소켓통신 프레임워크
- 자바 소켓통신
- 사천성 게임
- netty
- 구성
- 소켓 유틸
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |