2022 / 9 / 27 화
- 스레드 그룹
- 스레드폴
- 컬렉션 프레임워크
✔ 스레드 그룹
스레드 그룹
- 관련된 스레드를 묶어 관리할 목적으로 이용된다.
- 스레드 그룹은 계층적으로 하위 스레드 그룹을 가질 수 있다.
- 스레드는 반드시 하나의 스레드 그룹에 포함되는데, 스레드 그룹을 지정하지 않으면 기본적으로
자신을 생성한 스레드와 동일한 스레드 그룹에 속하게 된다.
public static void main(String[] args) {
AutoSaveThread autoSaveThread = new AutoSaveThread();
autoSaveThread.setName("AutoSaveThread"); // 스레드이름
autoSaveThread.setDaemon(true); // 데몬스레드(보조기능 스레드)
autoSaveThread.start(); // start작업전 스레드의 속성을 먼저주자.
// 프로세스 내 실행하는 모든 스레드에 대한 정보를 얻을 수 있다.
Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
Set<Thread> threads = map.keySet();
for(Thread thread : threads) {
System.out.println("Name : " + thread.getName() + ((thread.isDaemon())? "(데몬스레드)" : "(주스레드)"));
System.out.println("\t" + "소속그룹:" + thread.getThreadGroup().getName());
System.out.println();
}
}
✔ 스레드폴
스레드폴?
- 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해놓고,
작업 큐에 들어오는 작업들을 스레드가 하나씩 맡아 처리한다.
- 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리한다.
스레드가 폭증한다면?
- 병렬 작업 처리가 많아지게 된다면, 스레드 개수도 증가되며 cpu가 바빠져 메모리 사용량이 늘어난다.
- 결과적으로 프로그램의 성능이 저하된다!
스레드폴 생성 방법
Executors 클래스의 두 가지 메소드 중 하나를 사용하여 생성한다.
메소드명 | 초기 스레드 수 | 코어 스레드 수 | 최대 스레드 수 |
newCachedThreadPool( ) | 0 | 0 | Integer.MAX_VALUE |
newFixedThreadPool(int nThreads) | 0 | nThreads | nThreads |
✔ 컬렉션 프레임워크
컬렉션?
요소(객체)를 수집하여 저장
product객체를 효율적으로 추가, 검색, 삭제하는 가장 간단한 방법은 배열을 이용하는 것 !
❗ but 배열의 문제점 ❗
1. 쉽게 생성하고 사용이 가능하지만, 저장 가능 객체 수가 배열을 생성할 때 결정되기에
불특정 다수의 객체를 저장하기에는 문제가 있다.
2. 객체를 삭제했을 때 해당 인덱스가 비게 되며 마치 이빨 빠진 옥수수가 될 수 있다.
컬렉션 프레임워크 (Collection Framework)
위와 같은 문제점을 해결하기 위해 객체들을 효율적으로 추가, 검색, 삭제할 수 있도록 제공되는 컬렉션 라이브러리이다.
주요 인터페이스 |
특징 | 구현 클래스 | |
Collection | List | 순서를 유지하고 저장 중복 저장 가능 |
ArrayList, Vector LinkedList |
Set | 순서를 유지하지 않고 저장 중복 저장 안됨 |
HashSet, TreeSet | |
Map | 키와 값의 쌍으로 저장 키는 중복저장 안됨 |
HashMap, Hashtable TreeMap, Properties |
리스트 컬렉션 (List Collection)
객체를 일렬로 늘어놓은 구조를 가진다.
객체를 인덱스로 관리하며 중복해서 객체를 저장할 수 있다.
List 컬렉션에는 ArratList / Vector / LinkedList 가 있다.
// 배열
// 배열선언 및 생성시 정한 크기를 벗어나면, 예외발생
// 데이터 타입이 정해져있으므로, 다른 데이터 타입은 사용불가능하다. 형변화는 제외
int[] arr = new int[3]; //int형 기억장소 12바이트가 연속적으로 힙영역에 생성
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[1] = 0; //기억장소 제거는 불가능, 값만 변경가능
// 컬렉션. JDK에서 많은 클래스로 제공 java.util패키지 제공
ArrayList al = new ArrayList(); //힙영역의 컬렉션 기억장소 생성
al.add(1);
al.add(2);
al.add(3);
al.add(4);
// 컬렉션 기억장소의 특징은 데이터를 메모리가 허용되는 한 데이터를 계속 추가할 수 있다.
// 추가시 메모리 자동생성
ArrayList
ArrayList를 생성하기 위해서는 다음과 같이 생성할 수 있다.
List <String> list = new ArrayList <String> ( );
< > 안에 원하는 객체 타입을 타입 파라미터로 표기한다.
ex) <String> / <Integer>
Vector
Vector는 ArrayList와 동일한 내부 구조를 갖는다.
List < > list = new Vector < > ( );
LinkedList
List < > list = new LinkedList < > ( );
LinkedList는 ArrayList와 사용 방법은 똑같지만, 내부구조는 완전 다르다.
ArrayList | 내부 배열에 객체를 저장하여 인덱스로 관리 |
LinkedList | 인접 참조를 링크해서 체인처럼 관리 |
'🏃♀️ Do it ! > TIL' 카테고리의 다른 글
제네릭 / 멀티 타입 파라미터 / 제네릭 메소드 / 버블 소트 (0) | 2022.09.30 |
---|---|
Set 컬렉션 / Map 컬렉션 / 이진 트리 / 스택 & 큐 (0) | 2022.09.28 |
스레드 상태 / 데몬 스레드 (0) | 2022.09.26 |
프로세스 / 스레드 / 동기화 메소드, 동기화 블록 (0) | 2022.09.23 |
Date , Calendar 클래스/ Format 클래스 / java.time 패키지 (1) | 2022.09.22 |