이번에는 자바 멀티스레드 환경에서 동기화하는 법에 대해서 알아보겠다. 예전에 C++ 환경에서 멀티스레드 동기화 자료가 있으니 필요하신분들은 그쪽을 확인하시면 되겠다. 우선 동기화가 필요한 이유는 N개의 스레드가 공통자원을 사용할때 문제가 생기기 때문이다. 다음과 같은 코드가 있다고 할때 양쪽 스레드에서 res를 10000번 ++ 증가 시키기 때문에 2개의 쓰레드의 합으로 결과가 20000이 나올것이라 예상했다. 하지만 결과를 보면 우리의 예상과는 다르다. 이러한 값이 나오는 이유는 예를들어 th1이 res가 100인 값을 증가하려고 할 때 동시에 th2도 res 변수를 증가시키려고 할때가 있다. 그러면 사실 두 개의 스레드가 증가시켰으니 102가 되어야 하지만 th1과 th2가 동시에 res변수에 접근했..
앞에 포스팅에서 봤겠지만 MainThread가 종료됬다고해서 그 안에서 동작하던 Thread들은 종료되지 않는다.(http://idea-sketch.tistory.com/admin/entry/post/?id=17) 그래서 이번에는 MainThread가 종료될때 같이 종료되는 Thread를 만들어보자. 방법은 아주아주 * 100 간단하다!! 바로 setDaemon() 을 true로 설정하면 끝! 다음은 예제 코드이다. 실행결과이다. MainThread가 종료되고 난후 더이성 is Running...이 뜨지 않는다. 즉 그 안에서 동작중이던 Thread도 같이 종료되었다~ 누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~
이전 포스팅에서 Thread에 대해서 간단하게 알아봤다면 이번에는 Thread 비정상 종료시 대응하는 방법에 대해 알아보겠다. 물론 나도 책을 보기전까지는 몰랐던 내용이다. -_-; 다음과 같은 코드가 있을때 MainThread가 죽어도 그 안에서 생성한 Thread는 살아서 동작하고 있다. 그럴때 동작중인 Thread를 종료하고 싶으면 Ctrl + C를 이용하면 현재 실행중인 JVM을 종료하면 된다. 그러나 이러한 종료상황은 안에서 동작하던 Thread의 입장에서는 비정상 종료이고 예기치 못한 결과를 얻을 수도 있다. (ex. 파일 저장중 강제종료로 인한 파일손상등...) 따라서 프로그램 실행중 종료가 요청되면 종료전에 필요한 수행작업을 꼭 하고 종료되어야 한다. 그래서 우리는 ShutDownHook을..
- Total
- Today
- Yesterday
- 트랜잭션
- Elasticsearch Cluster
- MySQL
- 메타프로그래밍
- 되추적
- metaprogramming
- dead lock
- ruby
- db
- 루비
- gap lock
- lock
- 넥스트 키 락
- 페어 프로그래밍
- mysql lock
- 페어프로그래밍
- InnoDB
- 엘라스틱서치 기초
- 갭 락
- MySQL 족보
- 루비 메타프로그래밍
- MySQL 인덱스
- Autoloading
- Pair-programming
- 인덱스
- 루비 상수
- autoload_paths
- innoDB lock
- next key lock
- ruby meta programming
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |