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

자바 메모리 구조
메서드영역: 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다.
클래스 정보, static, 런타임 상수
스택영역: 자바 실행 시 스택이 생성된다.
스택 프레임: 스택 영역에 쌓이는 네모 박스 하나가 스택 프레임이다
힙영역: 객체와 배열이 생성되는 영역. 가비지 컬랙션이 이루어지는 주요 영역.
스레드 생성
1. Thread 상속
public class HelloThread extends Thread{
@Override
public void run(){
System.out.println(Thread.currentThread().getName()+":run()");
}
}
.run은 호출하지 말기 : 하단의 이유 제시
.start() 사용하기 => 그래야 개별 쓰레드가 스택 공간을 할당 받고 수행된다.
1. 쓰레드 생성시 쓰레드의 스택이 run method를 올리고 생성
2. start() 메서드를 호출하면 Thread-0 쓰레드가 시작되면서 run() 메서드를 호출한다 => Main Thread가 run을 호출하는게 아님
만일 main method에서
.run() 호출이 있다면 다른 스레드가 호출하는 것이여도 main 스레드 스택에 생기게된다.
데몬 스레드
사용자 스레드와 데몬 스레드 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를 통해서 만들