ConcurrentHashMap에 보니까 putIfAbsent가 있어서
딱 싱글톤 풀처럼 사용할 수 있겠다 생각함.
그니까 new A(123) 이란 객체가 생성되면 맵에 집어 넣고 씀
파일 IO 작업 하는애라 다른 new A(123)으로 작업하면 망하니까 그걸 방지..ㅇㅇ
그래서 생각좀 하다가 ConcurrentHashMap put 메소드 오버라이딩 해서
써야지 했는데 보니까 putIfAbsent있어서 저거 쓰면 되겠구나 했는데
또 생각해보니 점점 맵에 객체가 쌓이면 메모리가 터질꺼고
결국 맵을 주기적으로 새걸로 바꿔야 하는데
A(123) 객체가 작업도중에 맵이 교체되고 123으로 요청이 들어오면
결국 똑같은 문제가 발생하는데 좋은방법 없을까.
일단 한가지 생각한 방법은 해당 객체에 레퍼런스 카운팅 역할 하는 변수를
추가해서 일정 주기마다 맵을 순회하면서 이 레퍼런스 카운팅 0인 애들을 지워버리는건데
무슨 언어길래 그런 호구같은 문제가 발생함?
자바입니다만 저 문제는 내 머리속에서만 생기는 문제일지도
시나리오는 대략 팩토리 매서드 B가 있다고치고 B(111) 요청이 들어와서 new A(111)이 맵에 들어가고 IO작업중
A(111) 작업도중 맵이 교체, 그러고 B(111) 요청이 다시 들어옴 그럼 새로운 new A(111)이 새로운 맵에 들어가고 IO작업 노답
여기왜싱글턴얘기가나오지너님이필요하신건워커쓰레드풀인거같은데요
1. 짝퉁 메모리 페이징을 구현한다 2. 짝퉁 gc를 구현한다 3. 설계를 뒤집어엎는다 난 솔직히 3번추천한다
아는게 별로 없는 자바 학원충인지라.. 워커 쓰레드풀은 찾아보도록 하겠습니다
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html
작업이중복되지않아야하면풀에던지기전에필터링하심되겠구요
컨커런트패키지제법쓸만합니다자바특성상쓰레드가좀뚱뚱하긴한데그래도섹시하니까괜차늠
그럼수고하세요
네 도와주셔서 감사합니다 해당 내용은 확인해보도록 하겠습니다