2011. 8. 27. 12:58
반복문을 실행하는 코드를 동기화시키는 방법은 비효율적이다. JAVA이야기2011. 8. 27. 12:58
반복문을 실행할 때 다른 스레드가 Collection의 데이터를 변경할 수 있다.
이를 방지하기 위해 동기화를 걸어야 하는데, 이 때문에 수행속도가 느려질 수 있다.
반복문을 실행한다는 것은 일반적으로 무거운 작업의 수행단위이다.
그러므로, 작업시간이 많이 소요되고 이에 따른 다른 스레드들은 이 자원을 획득하기 위해 대기를 해야한다.
이에 따라, 전체적인 수행속도가 느려질 수 있고, 수행하는 도중에 다른 코드가 다른 락을 확보해야 한다면 데드락에 빠질 위험도 있다.
해결방법은 clone메소드를 사용해서 Collection을 복사하고, 루프를 도는 방법인데 이 또한 복사본을 만드는데 시간이 오래 걸린다.
상황에 따라 적절한 전략을 짜야한다.
Collection의 객체들이 많은지, 개별 element마다 작업시간이 얼마나 걸리는지, 등 등을 고려해본다.
이를 방지하기 위해 동기화를 걸어야 하는데, 이 때문에 수행속도가 느려질 수 있다.
반복문을 실행한다는 것은 일반적으로 무거운 작업의 수행단위이다.
그러므로, 작업시간이 많이 소요되고 이에 따른 다른 스레드들은 이 자원을 획득하기 위해 대기를 해야한다.
이에 따라, 전체적인 수행속도가 느려질 수 있고, 수행하는 도중에 다른 코드가 다른 락을 확보해야 한다면 데드락에 빠질 위험도 있다.
해결방법은 clone메소드를 사용해서 Collection을 복사하고, 루프를 도는 방법인데 이 또한 복사본을 만드는데 시간이 오래 걸린다.
상황에 따라 적절한 전략을 짜야한다.
Collection의 객체들이 많은지, 개별 element마다 작업시간이 얼마나 걸리는지, 등 등을 고려해본다.
'JAVA이야기' 카테고리의 다른 글
futureTask (0) | 2011.08.27 |
---|---|
CountDownLatch (0) | 2011.08.27 |
AppLevel에서 바인딩 변수 사용하기 (0) | 2011.08.23 |
IBM의 JIT Compiler (0) | 2011.08.21 |
Execution Engine (0) | 2011.08.21 |