Concurrent 의미
- 동시에 여러 작업을 할 수 있다는 뜻
- ex. 웹 브라우저로 유튜브를 보면서, 키보드로 문서에 타이핑할 수 있다.
자바에서 지원하는 컨커런트 프로그래밍
- 멀티 프로세싱 multi-processing
- ProcessBuilder를 사용하면 자바에서 프로세스를 만드는게 가능하다.
- 멀티 쓰레드 multi-thread
- Thread
- Runnable
Thread
Thread 만들기
1. Thread를 상속받아 run() 메소드를 구현하여 사용자가 직접 Thread class 만들 수 있다.
public class App {
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start();
System.out.println("main : " + Thread.currentThread().getName());
}
static class MyThread extends Thread {
@Override
public void run() {
System.out.println("myThread : " + Thread.currentThread().getName());
}
}
}
/*결과*/
main : Thread-1
myThread : Thread-0
//쓰레드 실행 순서는 직접 설정할 수 없어서 main이 먼저 나올 수 도 있고, myThread가 먼저 나올 수 도 있다.
2. Thread의 생성자에 Runnable을 준다.
public class App {
public static void main(String[] args) {
//자바8 이전에는 Runnable을 익명클래스로 구현함
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread : " + Thread.currentThread().getName());
});
thread.start();
//자바8부터는 rambda식으로 바꾸어 구현 가능
Thread thread2 = new Thread(() -> {
System.out.println("Thread2: " + Thread.currentThread().getName());
});
thread2.start();
}
}
Runnable이 함수형 인터페이스로 바뀌었기 때문에 람다식으로 축약하여 작성할 수 있다.
thread 주요 기능
- sleep
- 현재 쓰레드 멈춰두기(대기)
- 다른 쓰레드가 처리할 수 있도록 기회를 주지만, 락을 풀지는 않는다. (데드락 걸릴 위험)
- interrupt
- 다른 쓰레드 깨워서 interruptException을 발생시킨다.
에러가 발생했을 때 종료 시킬 수 도 있고, 계속 하던 일 할 수도 있고 코딩하기 나름
- 다른 쓰레드 깨워서 interruptException을 발생시킨다.
- join
- 다른 쓰레드가 끝날 때까지 기다린다.
프로그래머가 몇백개의 쓰레드를 직접 코딩으로 관리하고 예외 처리할 수 없기 때문에 Executor, 더 나아가 Future를 사용할 수 있어야 한다.
더 공부해보자
- Concurrent Programming vs. Parallel Programming
- multi-Processing Vs. multi-Thread
이 포스팅은 더 자바, Java 8 강의를 수강하며 작성되었습니다.
더 자바, Java 8 강의 | 백기선 - 인프런
백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합
www.inflearn.com
'Java' 카테고리의 다른 글
[Java8] Callable과 Future (0) | 2024.08.29 |
---|---|
[Java8] Executors (0) | 2024.08.28 |
[Java8] Date & Time API (1) | 2024.08.12 |
[Java8] Optional API (0) | 2024.08.05 |
[Java8] Optional (0) | 2024.08.01 |