JAVA

태태개발일지 - 멀티쓰레드

태태코 2025. 2. 5. 10:13
반응형

자바 메모리 구조

메서드영역: 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다.

클래스 정보, static, 런타임 상수

 

스택영역: 자바 실행 시 스택이 생성된다.

스택 프레임: 스택 영역에 쌓이는 네모 박스 하나가 스택 프레임이다

 

힙영역: 객체와 배열이 생성되는 영역. 가비지 컬랙션이 이루어지는 주요 영역.

 

스레드 생성

1. Thread 상속
public class HelloThread extends Thread{
	
    @Override
    public void run(){
    	System.out.println(Thread.currentThread().getName()+":run()");
    }
}

 

.run은 호출하지 말기 : 하단의 이유 제시

 

.start() 사용하기 => 그래야 개별 쓰레드가 스택  공간을 할당 받고  수행된다.

 

 

 

출처: 김영한 - 고급1편, 멀티스레드와 동시성

 

1. 쓰레드 생성시 쓰레드의 스택이 run method를 올리고 생성

 

2. start() 메서드를 호출하면 Thread-0 쓰레드가 시작되면서 run() 메서드를 호출한다 => Main Thread가 run을 호출하는게 아님

 

만일 main method에서
.run() 호출이 있다면 다른 스레드가 호출하는 것이여도 main 스레드 스택에 생기게된다.

 

출처: 김영한 - 고급1편, 멀티스레드와 동시성

 

 

데몬 스레드

사용자 스레드와 데몬 스레드 2가지 종류로 구분할 수 있다.

 

보통은 사용자 스레드

user 스레드가 종료되면 JVM도 종료된다.

 

데몬 스레드

백그라운드에서 보조적인 작업을 수행한다.

모든 user 스레드가 종료되면 데몬 스레드는 자동으로 종료된다.

 

2. Runnable
public class HelloRunnable implements Runnable{
	
    @Override
    public void run(){
    	System.out.println(Thread.currentThread().getName()+":start()");	
    	
    }
	
}


HelloRunnable runnable = new HelloRunnable();
Thread thread = new Thread(runnable);

 

Thread를 상속하는 방법보다 Runnable 인터페이스를 구현하는 방식이 더 좋다.

 

Thread 상속의 장점
간단한 구현: Thread 클래스를 상속받아서 run( )메서드만 실행하면된다.

 

단점: 

단일 상속만 되기떄문에 다른 쓰레드를 상속받을 수 없다.

 

 

Runnable

장점: 다른 클래스를 상속받을 수 있다.

스레드의 실행 작업을 분리하여 코드 가독성을 높일 수 있음

여러 쓰레드가 동일한 runnable 객체를 공유가능.

 

단점: 코드가 약간 복잡해진다.

위와같은 코드

 

Runnable 구현

 

1. 중첩클래스로 만들기

 

2. 익명클래스로 만들기

 

3. Lamda를 통해서 만들

 

 

 

반응형