Thread
1 Multi Thread
2 Process와 Thread
2.1 Process
- 프로세스란 실행 중인 프로그램이다
- 프로세스는 종종 프로그램 또는 애플리케이션과 동의어로 간주된다.
- 그러나 사용자가 단일 애플리케이션으로 인식하는 것은 사실 협력 프로세스 집합일 수 있다.
- 프로세스 간 통신(IPC)를 통해 프로세스 집합은 서로 통신한다.
- 프로세스는 독립적이기 때문에 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않는다
- Process.md
2.2 Thread
- 스레드는 사전적 의미로 한 가닥의 실이라는 뜻이다
- 스레드는 경량 프로세스(lightweight processes)라고도 한다.
- 프로세스와 스레드는 모두 실행 환경을 제공하지만, 새 스레드를 만드는 것은 새 프로세스를 만드는 것보다 더 적은 리소스를 필요로 한다.
- 스레드는 프로세스 내에 존재하며, 모든 프로세스에는 하나 이상의 쓰레드가 있다.
- 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있어 다른 스레드에 양향을 미칠 수 있다
- 따라서 멀티 스레드에서는 예외 처리를 잘 해야한다.
- 스레드는 메모리 및 열린 파일을 포함하여 프로세스의 리소스를 공유합니다.
- 이로 인해 효율적이지만 잠재적으로 동시성 문제가 발생할 수 있다.
- Threads.md
3 Main Thread
- 모든 자바 애플리케이션은 메인 스레드가 main() 메소드를 실행하면서 시작합니다.
- 자바는 실행 시점에
main이라는 이름의 스레드를 만들고 프로그램의 시작점인main()메서드를 실행합니다.
- 자바는 실행 시점에
- 싱글 스레드 애플리케이션은 메인 스레드가 종료하면 프로세스도 종료된다
- 멀티 스레드 애플리케이션은 실행 중인 스레드가 하나라도 있으면 프로세스가 종료되지 않는다
- 메인 스레드가 종료되고 작업 스레드가 실행중인 경우 포함
- 메인 스레드는 필요에 따라 작업 스레드를 만들어 병렬로 코드를 실행한다.
4 Thread 생성 및 실행
- 자바에서는 작업 스레드도 객체로 생성된다
- Thread 객체 생성 방법
java.lang.Thread클래스를 객체화해서 사용executor를 사용
4.1 Thread 클래스로 생성
- 작업 스레드 생성시 스레드가 실행할 코드를 제공해야 한다.
- 스레드 생성시 생성자의 인자로 Runnable 인터페이스의 구현체가 들어간다.
- 스레드는 Runnable 인터페이스를 구현한 구현체의 run()메소드를 실행한다.
- 따라서 작업 스레드를 통해 실행하고자 하는 코드를 Runnable 인터페이스를 구현한 구현체의 run()메소드에 작성하면 된다.
- 작업 스레드는 생성되는 즉시 실행되는 것이 아니라
start()메소드를 호출하면 실행된다start()가 호출되면 매개값으로 받은Runnable의run()메소드를 실행하면서 자신의 작업을 처리한다
// 작업 Thread 생성
Thread thread = new Thread();
// 작업 Thread 실행
thread.start();