라이브러리 활용 - 멀티 스레드 (9) 썸네일형 리스트형 스레드풀 스레드풀로 작업 처리 제한하기 작업 처리에 사용되는 스레드 개수를 제한하고 작업 큐에 들어오는 작업들을 스레드가 하나씩 맡아 처리하는 방식 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리 작업량이 증가해도 스레드의 개수가 늘어나지 않아 애플리케이션의 성능의 급격한 저하 방지 출처, 이것이 자바다 스레드풀 생성 java.util.concurrent 패키지에서 ExecutorService 인터페이스와 Executors 클래스를 제공 Executors의 다음 두 정적 메소드를 이용하면 스레드풀인 ExecutorService 구현 객체를 만들 수 있음 출처, 이것이 자바다 초기 수: 스레드풀이 생성될 때 기본적으로 생성되는 스레드 수 코어 수: 스레드가 증가된 후 사용되지 않는 스레드를 .. 데몬 스레드 데몬 스레드 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드 주 스레드가 종료되면 데몬 스레드도 따라서 자동 종료 데몬 스레드를 적용 예: 워드프로세서의 자동 저장, 미디어플레이어의 동영상 및 음악 재생, 가비지 컬렉터 주 스레드가 데몬이 될 스레드의 setDaemon(true)를 호출 출처, 이것이 자바다 package ch14.sec08; public class AutoSaveThread extends Thread { public void save() { System.out.println("작업 내용을 저장함."); } @Override public void run() { //스레드의 제어를 받는 코드 while(true) { try { Thread.sleep(1000); } catch (I.. 스레드 안전 종료 안전하게 스레드 종료하기 스레드 강제 종료 stop() 메소드: deprecated(더 이상 사용하지 않음) 스레드를 안전하게 종료하려면 사용하던 리소스(파일, 네트워크 연결)를 정리하고 run() 메소드를 빨리 종료해야 함 조건 이용 while 문으로 반복 실행 시 조건을 이용해 run() 메소드 종료를 유도 출처, 이것이 자바다 package ch14.sec07.exam01; public class PrintThread extends Thread{ private boolean stop; //기본값 false public void setStop(boolean stop) { this.stop = stop; } @Override public void run() { while(!stop) { System.o.. 스레드 동기화 동기화 메소드와 블록 스레드 작업이 끝날 때까지 객체에 잠금을 걸어 스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없게 함 출처, 이것이 자바다 출처, 이것이 자바다 동기화 메소드 및 블록 선언 인스턴스와 정적 메소드에 synchronized 키워드 붙임 출처, 이것이 자바다 동기화 메소드를 실행 즉시 객체는 잠금이 일어나고, 메소드 실행이 끝나면 잠금 풀림 메소드 일부 영역 실행 시 객체 잠금을 걸고 싶다면 동기화 블록을 만듦 출처, 이것이 자바다 package ch14.sec06.exam01; //공유객체 public class Calculator { //공유필드 private int memory; public int getMemory() { return memory; } //synchroniz.. 스레드 상태 스레드 상태 실행 대기 상태: 실행을 기다리고 있는 상태 실행 상태: CPU 스케쥴링에 따라 CPU를 점유하고 run() 메소드를 실행. 스케줄링에 의해 다시 실행 대기 상태로 돌아갔다가 다른 스레드가 실행 상태 반복 종료 상태: 실행 상태에서 run() 메소드가 종료되어 실행할 코드 없이 스레드의 실행을 멈춘 상태 출처, 이것이 자바다 일지 정지 상태 스레드가 실행할 수 없는 상태 스레드가 다시 실행 상태로 가기 위해서는 일시 정지 상태에서 실행 대기 상태로 가야야 함 출처, 이것이 자바다 주어진 시간 동안 일시 정지 Thread 클래스의 sleep() 메소드: 실행 중인 스레드를 일정 시간 멈추게 함 매개값 단위는 밀리세컨드(1/1000) 출처, 이것이 자바다 package ch14.sec05.exa.. 스레드 이름 작업 스레드의 이름 작업 스레드 이름을 Thread-n 대신 다른 이름으로 설정하려면 Thread 클래스의 setName() 메소드 사용 출처, 이것이 자바다 디버깅할 때 어떤 스레드가 작업을 하는지 조사하기 위해 주로 사용 어떤 스레드가 실행하고 있는지 확인하려면 정적 메소드인 currentThread()로 스레드 객체의 참조를 얻은 다음 getName() 메소드로 이름을 출력 출처, 이것이 자바다 package ch14.sec04; /* 스레드 이름 지정 - 디버깅을 통하여, 스레드를 분석할때 사용. */ public class ThreadNameExample { //메인 스레드 public static void main(String[] args) { Thread mainThread = Thread... 작업 스레드 생성과 실행 작업 스레드 멀티 스레드 프로그램을 개발 시 먼저 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성 출처, 이것이 자바다 Thread 클래스로 직접 생성 java.lang 패키지에 있는 Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 Runnable 구현 객체를 매개값으로 갖는 생성자를 호출 출처, 이것이 자바다 package ch14.sec03.exam01; /* 스레드 : 코드를 독립적으로 실행하는 단위. JVM에서는 메인 스레드라는 기본 스레드를 이용하여 main()메소드가 동작을 하게한다. - 스레드 : 메인 스레드(기본) - 실행결과 : 작업1 -> 작업2 */ import java.awt.Toolkit; public class BeepPrintExample { p.. 메인 스레드 메인 스레드 메인 스레드는 main() 메소드의 첫 코드부터 순차적으로 실행 main() 메소드의 마지막 코드를 실행하거나 return 문을 만나면 실행을 종료 출처, 이것이 자바다 메인 스레드는 추가 작업 스레드들을 만들어서 실행시킬 수 있음 메인 스레드가 작업 스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이라면 프로세스는 종료되지 않음 출처, 이것이 자바다 이전 1 2 다음