자바에서 병렬 처리를 구현하는 방법은 무엇인가요?
자바에서 병렬 처리는 여러 작업을 동시에 실행하여 프로그램의 성능과 응답성을 향상시키는 기법입니다.
자바는 멀티스레딩(Multithreading)과 병렬 스트림(parallel streams) 등 여러 방법을 통해 병렬 처리를 지원합니다.
주요 구현 방법들을 아래에 정리했습니다.
--- 1. 스레드(Thread) 사용하기 1-1. Thread 클래스를 상속받기 ```java class MyThread extends Thread { public void run() { System.out.println("Thread is running"); } } public class Main { public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); // run() 메서드를 새로운 스레드에서 실행 } } ``` - `start()` 메서드를 호출하면 새로운 스레드가 생성되고, `run()` 메서드가 병렬로 동작합니다.
1-2. Runnable 인터페이스 구현하기 ```java class MyRunnable implements Runnable { public void run() { System.out.println("Runnable running"); } } public class Main { public static void main(String[] args) { Thread t1 = new Thread(new MyRunnable()); t1.start(); } } ``` - `Runnable` 인터페이스를 사용하면 스레드를 상속받지 않아도 되고, 자바는 다중 상속을 지원하지 않기 때문에 더 유연합니다.
--- 2. Executor 프레임워크 이용하기 (java.util.concurrent 패키지) 2-1. ExecutorService 사용 ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(3); // 3개의 쓰레드 풀 생성 for (int i = 0; i < 10; i++) { int taskNum = i; executor.submit(() -> { System.out.println("Task " + taskNum + " is running by " + Thread.currentThread().getName()); }); } executor.shutdown(); // 모든 작업 완료 후 종료 } } ``` - 스레드 관리를 프레임워크가 대신해 주어 다수의 작업을 효율적으로 처리 가능 - `newFixedThreadPool`, `newCachedThreadPool`, `newSingleThreadExecutor` 등 다양한 풀 생성 메서드 제공 --- 3. CompletableFuture 사용하기 (비동기 병렬 처리) ```java import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture