도당탕탕
Item84 : Thread Scheduler에 의존하지마라 본문
이유
운영체제마다 스레드 스케줄링 방식이 달라서, 모든 운영체제에서 같게 동작한다는 보장이 없다.
해결방법
- runnable thread의 평균수를 프로세서 수 보다 너무 많게 설정하지 않기
- busy waiting인 스레드를 줄이기
public class SlowCountDownLatch { private int count; public SlowCountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException(count + " < 0"); this.count = count; } public void await() { while (true) { synchronized(this) { if (count == 0) return; } } } public synchronized void countDown() { if (count != 0) count--; } }
Thread.yield
또는 Thread priority 조정으로 문제를 고치려고 하지 말고 근본문제를 파악하고 해결하기- JVM 구현체에 따라 효과가 있을 수 도 있고 없을 수 도 있다.
- 이미 잘 동작중인 프로그램에 대해서는 시도할수 있다.
'JAVA' 카테고리의 다른 글
Item86 : SERIALIZABLE을 구현할때는 주의해서 하라. (0) | 2023.02.08 |
---|---|
Item85 : 자바 직렬화의 대안을 찾으라 (0) | 2023.02.08 |
Item83 : 지연 초기화는 신중히 사용하라 (0) | 2023.02.07 |
Item82 : Thread Safety를 문서화하라. (0) | 2023.02.06 |
Item81 : wait와 notify보다는 동시성 유틸리티를 애용하라 (0) | 2023.02.06 |
Comments