Open CodingWon opened 3 weeks ago
Runnable만드는 다양한 방법에 대해서 말씀해주셨는데, 보통은 runnable 패키지를 따로 파서 거기에다가 도메인별로 필요한 작업을 모아서 관리하지 않을까요?
오호 실제로 그렇게 한다네요. com.example.project ├── runnable │ ├── email │ │ ├── EmailSenderRunnable.java │ │ ├── EmailLoggerRunnable.java │ ├── file │ │ ├── FileUploaderRunnable.java │ │ ├── FileProcessorRunnable.java │ ├── notification │ │ ├── NotificationSenderRunnable.java │ │ ├── NotificationCleanerRunnable.java
1.자바 메모리 구조
메서드 영역 : 프로그램을 실행하는데 필요한 공통 데이터를 관리
1) 클래스 정보 : 클래스의 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드등 모든 실행 코드가 존재
static 영역 : static 변수들을 보관한다.
런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다
스택 영역 : 자바 실행 시 하나의 스택이 생성
힙 영역 : 객체(인스턴스) 와 배열이 생성되는 영역
2. 스레드 생성 - Thread 상속
run()
메서드가 아니라 반드시start()
메서드를 호출start()
를 호출해야 스택 공간을 할당 받고 스레드가 작동한다.start()
메서드를 빠져 나온다.3. 데몬 쓰레드
데몬 쓰레드
데몬 쓰레드 생성
setDaemon(true)
로 설정 할 수 있다.4. 스레드 생성 - Runnable
Runnable 인터페이스
구현 클래스 - HelloRunnable
실행
5. Thread 상속 vs Runnable 구현
1) Thread 상속 방식
Thread
클래스를 상속받아run()
메서드만 재정의하면 된다Thread
클래스 상속을 받을 수 없다.2) Runnable 인터페이스 구현 방식
Runnable
객체를 공유할 수 있어 자원 관리를 효율적으로 할 수 있다.Runnalbe
객체를 만들고Thread
에 전달해야 한다.결론 - Runnable 를 사용해라 !
6. 로거 만들기
MyLogger
main
결과
7. 여러 쓰레드 만들기
쓰레드 3개 생성
실행 결과
스택 프레임
8. Runnable을 만드는 다양한 방법
1) 정적 중첩 클래스 사용
2) 익명 클래스 사용
3) 익명 클래스 변수 없이 직접 전달
4) 람다
9. 문제 4 : 여러 쓰레드 사용
Thread-A
,Thread-B
두 스레드를 만들어라Thread-A
는 1초에 한 번씩 "A"를 출력한다.Thread-B
는 0.5초에 한 번씩 "B"를 출력한다.