Java

[Java8] Concurrent Programming

나프초 2024. 8. 27. 22:42

Concurrent 의미

  • 동시에 여러 작업을 할 수 있다는 뜻
    • ex. 웹 브라우저로 유튜브를 보면서, 키보드로 문서에  타이핑할 수 있다.

 

자바에서 지원하는 컨커런트 프로그래밍

  1. 멀티 프로세싱 multi-processing
    • ProcessBuilder를 사용하면 자바에서 프로세스를 만드는게 가능하다.
  2. 멀티 쓰레드 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 주요 기능

  1. sleep
    1. 현재 쓰레드 멈춰두기(대기)
    2. 다른 쓰레드가 처리할 수 있도록 기회를 주지만, 락을 풀지는 않는다. (데드락 걸릴 위험)
  2. interrupt
    1. 다른 쓰레드 깨워서 interruptException을 발생시킨다.
      에러가 발생했을 때 종료 시킬 수 도 있고, 계속 하던 일 할 수도 있고 코딩하기 나름
  3. join
    1. 다른 쓰레드가 끝날 때까지 기다린다.

 

프로그래머가 몇백개의 쓰레드를 직접 코딩으로 관리하고 예외 처리할 수 없기 때문에 Executor, 더 나아가 Future를 사용할 수 있어야 한다.


더 공부해보자

  1. Concurrent Programming vs. Parallel Programming
  2. multi-Processing Vs. multi-Thread

이 포스팅은 더 자바, Java 8 강의를 수강하며 작성되었습니다.

 

더 자바, Java 8 강의 | 백기선 - 인프런

백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합

www.inflearn.com