분류 전체보기 1341

Ch03. 스레드 제어와 생명 주기 - Join

Waiting (대기 상태): 스레드가 다른 스레드의 특정 작업이 완료되기를 무기한 기다리는 상태.그림에서 생략되었지만, "Thread-2"도 "main" 스레드가 생성하고 start()를 호출해서 실행한다."thread-1" , "thread-2"는 각각 특정 작업을 수행한다. 작업 수행에 약 2초 정도가 걸린다고 가정하기 위해 "sleep()"을 사용해서 2초간 대기한다. (그림에서는 "RUNNABLE"로 표현했지만, 실제로는 "TIMED_WAITING" 상태이다.)실행 결과를 보면 "main" 스레드가 먼저 종료되고, 그다음에 "thread-1" , "thread-2"가 종료된다."main" 스레드는 "thread-1" , "thread-2"를 실행하고 바로 자신의 다음 코드를 실행한다. 여기서 핵..

Ch03. 스레드 제어와 생명 주기 - 체크 예외 재정의

Runnable 인터페이스의 run() 메서드를 구현할 때 "InterruptedException" 체크 예외를 밖으로 던질 수 없는 이유를 알아보자.Runnable 인터페이스 public interface Runnable { void run();}자바에서 메서드를 재정의 할 때, 재정의 메서드가 지켜야 할 예외와 관련된 규칙이 있다. 체크 예외부모 메서드가 체크 예외를 던지지 않는 경우, 재정의된 자식 메서드도 체크 예외를 던질 수 없다.자식 메서드는 부모 메서드가 던질 수 있는 체크 예외의 하위 타입만 던질 수 있다. 언체크(런타임) 예외예외 처리를 강제하지 않으므로 상관없이 던질 수 있다.Runnable 인터페이스의 run() 메서드는 아무런 체크 예외를 던지지 않는다. 따라서 Runnabl..

Ch03. 스레드 제어와 생명 주기 - 설명 / 코드

스레드의 상태New (새로운 상태): 스레드가 생성되었으나 아직 시작되지 않은 상태.Runnable (실행 가능 상태): 스레드가 실행 중이거나 실행될 준비가 된 상태.일시 중지 상태들 (Suspended States)Blocked (차단 상태): 스레드가 동기화 락을 기다리는 상태.Waiting (대기 상태): 스레드가 무기한으로 다른 스레드의 작업을 기다리는 상태.Timed Waiting (시간제한 대기 상태): 스레드가 일정 시간 동안 다른 스레드의 작업을 기다리는 상태.Terminated (종료 상태): 스레드의 실행이 완료된 상태.참고: 자바에서 스레드의 일시 중지 상태들(Suspended States)이라는 상태는 없다. 스레드가 기다리는 상태들 을 묶어서 쉽게 설명하기 위해 사용한 용어이다...

Ch03. 스레드 제어와 생명 주기 - 스레드 기본 정보

Thread 클래스는 스레드를 생성하고 관리하는 기능을 제공한다.스레드 생성스레드를 생성할 때는 실행할 Runnable 인터페이스의 구현체와, 스레드의 이름을 전달할 수 있다.Thread myThread = new Thread(new HelloRunnable(), "myThread");Runnable 인터페이스: 실행할 작업을 포함하는 인터페이스이다. "HelloRunnable" 클래스는 "Runnable"인 터페이스를 구현한 클래스이다.스레드 이름: "myThread" 라는 이름으로 스레드를 생성한다. 이 이름은 디버깅이나 로깅 목적으로 유용하다. 참고로 이름을 생략하면 "Thread-0" , "Thread-1" 과 같은 임의의 이름이 생성된다.스레드 객체 정보log("myThread = " + myT..

Ch02. 스레드 생성과 실행 -Runnable을 만드는 다양한 방법

정적 중첩 클래스 사용특정 클래스 안에서만 사용되는 경우 이렇게 중첩 클래스를 사용하면 된다.익명 클래스 사용특정 메서드 안에서만 간단히 정의하고 사용하고 싶다면 익명 클래스를 사용하면 된다.익명 클래스 변수 없이 직접 전달익명 클래스를 참조하는 변수를 만들지 않고 직접 전달할 수 있다.람다람다를 사용하면 메서드(함수) 코드 조각을 전달할 수 있다.

Ch02. 스레드 생성과 실행 - 여러 스레드 만들기

Thread 3개 생성 > 실행실행 결과는 다를 수 있다. 스레드의 실행 순서는 보장되지 않는다.스레드3개를 생성할 때 모두 같은 "HelloRunnable" 인스턴스('x001')를 스레드의 실행 작업으로 전달했다.Thread-0 , Thread-1 , Thread-2 는 모두 "HelloRunnable" 인스턴스에 있는 "run()" 메서드를 실행한다.Thread 100개 생성 > 실행반복문을 사용하면 스레드의 숫자를 유동적으로 변경하면서 실행할 수 있다.실행 결과는 다를 수 있다.(스레드의 실행 순서는 보자되지 않는다.)

Ch02. 스레드 생성과 실행 - 로거 만들기

어떤 스레드가 코드를 실행하는지 출력하기 위해 다음과 같이 긴 코드를 작성하는 것은 너무 번거롭다System.out.println(Thread.currentThread().getName() + ": run()");다음 예시와 같이 실행하면, 현재 시간, 스레드 이름, 출력 내용등이 한 번에 나오는 편리한 기능을 만들어보자. log("hello thread"); log(123);로거 만들기 util 이라는 패키지를 사용했다. 프로젝트 전반에 사용되는 유틸리티라는 뜻이다.현재 시간을 원하는 포멧으로 출력하기 위해 "DateTimeFormatter" 를 사용한다.printf 에서 "%s" 는 문자열을 뜻한다. 인자를 순서대로 사용한다. 여기서는 현재 시간, 스레드 이름, 출력할 객체 순서이다.참고로 마지막의..

Ch02. 스레드 생성과 실행 - 스레드 생성(Runnable)

Runnable 인터페이스Java가 제공하는 스레드 실행용 인터페이스예제실행 결과는 기존과 같다. 차이가 있다면, 스레드와 해당 스레드가 실행할 작업이 서로 분리되어 있다는 점이다.스레드 객체를 생성할 때, 실행할 작업을 생성자로 전달하면 된다.Thread 상속 vs Runnable 구현스레드 사용할 때는 Thread를 상속받는 방법보다 Runnable 인터페이스를 구현하는 방식을 사용하자.두 방식이 서로 장단점이 있지만, 스레드를 생성할 때는 Thread 클래스를 상속하는 방식보다 Runnable 인터페이스를 구현하는 방식이 더 나은 선택이다 Thread 클래스 상속 방식장점간단한 구현: `Thread` 클래스를 상속받아 run() 메서드만 재정의하면 된다.단점상속의 제한: 자바는 단일 상속만을 허용하..

Ch02. 스레드 생성과 실행 - 데몬 스레드

데몬 스레드 VS 사용자 스레드사용자 스레드(non-daemon 스레드)프로그램의 주요 작업을 수행한다.작업이 완료될 때까지 실행된다.모든 user 스레드가 종료되면 JVM도 종료된다.데몬 스레드백그라운드에서 보조적인 작업을 수행한다.모든 user 스레드가 종료되면 데몬 스레드는 자동으로 종료된다.JVM은 데몬 스레드의 실행 완료를 기다리지 않고 종료된다. 데몬 스레드가 아닌 모든 스레드가 종료되면, 자바 프로그램도 종료된다.setDaemon(true): 데몬 스레드로 설정한다.데몬 스레드 여부는 start() 실행 전에 결정해야 한다. 이후에는 변경되지 않는다.기본 값은 false이다.(user Thread가 기본)참고: run() 메서드 안에서 Thread.sleep()를 호출할 때 체크 예외인 In..

Ch02. 스레드 생성과 실행 - 스레드 시작

자바 메모리 구조 복습 메서드 영역(Method Area): 메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다.클래스 정보: 클래스의 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드등 모든 실행 코드가 존재한다.static 영역: static 변수들을 보관한다.런타임 상수 풀: 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다.스택 영역(Stack Area) : 자바 실행 시, 하나의 실행 스택이 생성된다. 각 스택 프레임은 지역 변수, 중간 연산 결 과, 메서드 호출 정보 등을 포함한다.스택 프레임: 스택 영역에 쌓이는 네모 박스가 하나의 스택 프레임이다. 메서드를 호출할 때 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되..