강의(6)
-
[실전자바] 멀티스레드와 동시성 (4)
# 참고용 코드예시코드에 등장하는 자체 유틸리티 클래스들 적어둠더보기# ExecutorUtils - 스레드플 출력용public abstract class ExecutorUtils { public static void printState(ExecutorService es) { if (!(es instanceof ThreadPoolExecutor)) { LogUtils.info(es); return; } ThreadPoolExecutor poolExecutor = (ThreadPoolExecutor) es; int poolSize = poolExecutor.getPoolSize(); int activeCount = poolExecutor.getActiveCo..
2025.03.25 -
[실전자바] 멀티스레드와 동시성 (3)
11. Executor 프레임워크# 현실적 한계 - 스레드는 직접 사용하기 매우 어려움실무에서 스레드를 직접 생성해서 사용할 일은 사실상 없음왜냐하면 직접 생성하고 관리하기엔 아래 이유들 때문에 너무 어렵고 까다롭기 때문성능문제 - 스레드는 매우 비싸다스레드는 각자의 스택을 가지며, 이에 따른 별도 메모리 할당이 필요함(통상 1mb 정도)게다가 스레드 생성은 운영체제 커널 수준에서 이루어져서 시스템 콜이 발생함(즉, CPU 자원 소모)관리문제 - 스레드의 유지/종료는 생각보다 어렵다선착순 할인같은 이벤트를 열면 스레드가 10,000개로도 모자란 상황이 발생함근데 10,000개면 메모리 10GB정도임. 사실상 서버가 못버팀게다가 애플리케이션 종료도 스레드가 할 일을 다 하게 만들고 해야돼서 맘대로 못함즉,..
2025.03.19 -
[실전자바] 멀티스레드와 동시성 (2)
7. 생산자-소비자문제# 생산자-소비자 문제란멀티스레드 환경에서 공유 자원(버퍼나 큐)을 두고 데이터 생산/소비 스레드가 동시 접근할 때 발생할 수 있는 동기화 문제를 말함쉽게말해 한정된 진열대를 두고 너무 많이 생산해도 문제, 너무 많이 소비해도 문제인 상황을 말하는 거임한정된 버퍼(Bounded buffer problem)라고도 함특히, 데이터의 과소비/공급 뿐만이 아니라 락(lock) 문제가 껴있어서 생각보다 어려움그림으로 이해하기더보기# 초과 공급 상태 # 과다 소비 상태 # 스레드 대기 시키기 - wait(), notify(), notifyAll()synchronized로 지정된 임계영역에서의 소비자-생산자 문제를 해결하기 위한 Object 클래스의 메서드핵심은 스레드가 락을 점유하지 못하..
2025.02.26 -
[실전자바] 멀티스레드와 동시성
# 사전 안내이제부터 들어가는 설명에서 공통적으로 사용되는 유틸리티 클래스가 있음미리 참고하길 바람더보기# ThreadUtils - sleep() 사용할때 try catch문 자꾸 만들어야돼서 만듦package utils;public abstract class ThreadUtils { public static void sleep(long milis) { try { Thread.sleep(milis); } catch (InterruptedException e) { LogUtils.info("인터럽트 발생 > " + e.getMessage()); throw new RuntimeException(e); } }} # LogUtils - 콘솔 찍을때 예쁘게 나오라..
2025.01.12 -
[실전자바] 컬렉션 프레임워크
1. 배열# 배열특징여러 값을 담기 위한 가장 기본적인 자료구조배열의 길이는 최초 생성시 결정되며, 이후엔 길이 변경이 불가능배열 길이 변경이 불가능하다보니 요소 추가도 불편해서 주료 리스트 자료구조 사용함조회 O(1), 검색 O(N), 추가 O(N), 삭제 O(N)배열 관련 메서드 ㄴ 배열 출력은 Arrays.tostring(), Arrays.deepToString() (2차원 이상) ㄴ 배열 정렬은 Arrays.sort() ㄴ 배열 조회는 Arrays.binarySearch() (코테용) ㄴ 배열 복사는 Arrays.copyOf(), System.arrayCopy(), 2. 리스트(List)# 리스트중복과 관계없이 요소들을 순차적으로 담아내는 자료구조배열과 비슷하지만 엄연히 다른 개념배열과 달리..
2024.08.24 -
[실전자바] 각종 클래스
1. String 클래스 # 사용이유원래라면 문자'열'은 기본형 char를 배열로 만들어 char[] 형태로 보관해야한다그러나 char[]는 사용도 불편하고 관리도 어렵다때문에 문자열을 보다 쉽게 처리하기 위해 도입됨덕분에 지금의 String str = "abc" 같은 간단한 선언이 가능해진 것 # 클래스 구조String 클래스는 내부적으론 char[] 를 사용해 문자열을 보관함즉, 사람이 더 쓰기 편하게 만들었을뿐 근본적으론 문자열을 다루기 위해 char[]를 사용하는건 그대로인 것* Java9 버전 이후부턴 char[] → byte[] 배열에 보관(메모리 효율성) # 특이한 선언과 연산String 클래스로 만들어진 값은 원칙적으론 참조형이다따라서 변수 생성시 String str = new String..
2024.08.04