1 ) 프로세스와 쓰레드
- 프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
- 실행 중인 프로그램 이라고 생각하면 된다.
- 카카오톡, 브라우저, JAVA 프로그램 모두 프로세스로 실행.
- 크롬 브라우저를 2개 띄우면 크롬 브라우저 프로세스도 2개 띄워진 것
- 쓰레드 : 프로세스가 할당받은 자원을 이용하여 실행하는 단위
- 프로세스 내에서 일하는 일꾼
- 생성 : 프로세스가 작업 중인 프로그램에서 실행 요청이 들어오면 쓰레드(일꾼)을 만들어 명령을 처리하도록 한다.
- 자원 : 프로세스 안에서 여러 쓰레드들이 있고, 쓰레드들은 실행을 위한 프로세스 내 주소 공간이나 메모리 공간(Heap)을 공유 받는다.
- 쓰레드들은 각각 명령 처리를 위한 자신만의 메모리 공간(stack)을 할당 받는다.
- Java 쓰레드 : 프로그램을 실행하면 앞 서 배운 JVM 프로세스 위에서 실행됨.
2 ) Thread 와 Runnable
- Thread
public class TestThread extends Thread {
@Override
public void run() {
// 쓰레드 수행작업
}
}
...
TestThread thread = new TestThread(); // 쓰레드 생성
thread.start() // 쓰레드 실행
- Thread 메소드를 상속 받아야 사용 가능.
- Runnable
public class TestRunnable implements Runnable {
@Override
public void run() {
// 쓰레드 수행작업
}
}
...
Runnable run = new TestRunnable();
Thread thread = new Thread(run); // 쓰레드 생성
thread.start(); // 쓰레드 실행
- 여기서도 run() 메서드도 마찬가지로 쓰레드가 수행할 작업.
- Thread를 직접 상속받아 사용하는 방법이 더 간단해 보이지만 Runnable을 사용하여 쓰레드를 구현하는 방법을 쓰는 이유?
- 클래스와 인터페이스 차이 때문, Java는 다중 상속을 지원하지 않는다.
- 그렇기 때문에 Thread를 상속받아 처리하는 방법은 확장성이 매우 떨어짐.
- 반대로 Runnable은 인터페이스이기 때문에 다른 필요한 클래스를 상속 받을 수 있다.
- 따라서 확장성 유리
3 ) 쓰레드 상태와 제어
- 우리는 동영상을 보거나 음악을 듣고 있을 때 일시정지 후에 다시 보거나 듣기도 하고 중간에 종료 시키기도 합니다. 쓰레드도 마찬가지로 상태가 존재하고 이르 제어할 수 있습니다.
- 쓰레드 상태
이처럼 실행과 대기를 반복하며 run() 메서드를 수행한다.
run() 메서드가 종료되면 실행이 멈춘다.
- 쓰레드도 일시정지 상태를 만들 수 있으며, 일시정지 상태에선 쓰레드가 실행을 할 수 없는 상태가 된다.
- 쓰레드 제어의 종류
4 ) 람다와 스트림 문법
- 람다 ( Lambda )
// 기본적으로 문법은 다음과 같습니다.
(파라미터 값, ...) -> {함수 몸체}
( ) -> { }
// 아래의 함수 두개는 같은 함수입니다.
// 이름 반환타입, return문 여부에 따라 {}까지도 생략이 가능합니다.
pubilc int toLambdaMethod(int x, int y) {
return x + y;
}
(x, y) -> x + y
// 이런 함수도 가능하겠죠?
pubilc int toLambdaMethod2() {
return 100;
}
() -> 100
// 모든 유형의 함수애 가능합니다.
public void toLambdaMethod3() {
System.out.println("Hello World");
}
() -> System.out.println("Hello World");
- 스트림 ( Stream() )
- 스트림은 정확하게는 Java 8부터 제공되는, 한 번 더 추상화된 자료구조와 자주 사용하는 프로그래밍 API를 제공한 것.
- 병렬 처리에 유리한 구조로 조건부로 성능도 챙길 수 있다.
- 원본의 데이터를 변경하지 않으며, 일회용이다.
carWantToPark.stream() // 스트림 받아오기
.filter((Car car) -> car.getCompany().equals("Benz")) // 스트림 가공하기
.toList(); // 스트림 결과 만들기
'TIL > Java' 카테고리의 다른 글
TIL 2024-10-18 (Java 종합만 문법) (0) | 2024.10.18 |
---|---|
TIL 2024-10-16 (Java 종합만 문법) (2) | 2024.10.16 |
TIL 2024-10-14 (Java 문법 종합반) (2) | 2024.10.14 |
TIL 2024-10-11 (Java 문법 종합반) (0) | 2024.10.11 |
TIL 2024-10-10 (Java 문법 종합반) (0) | 2024.10.10 |