자바에서 스레드는 어떻게 생성하나요?
자바에서 스레드(Thread)를 생성하는 방법은 주로 두 가지가 있습니다.
스레드는 프로그램 내에서 동시에 여러 작업을 수행할 수 있게 해주는 실행 단위입니다.
자바에서는 기본적으로 java.lang.Thread 클래스를 사용하며, Runnable 인터페이스를 구현하는 방식으로 스레드를 생성합니다.
1. Thread 클래스를 상속받아 생성하기 - 새 클래스를 만들고 java.lang.Thread 클래스를 상속받습니다.
- run() 메서드를 오버라이드하여 스레드가 수행할 작업을 정의합니다.
- 인스턴스를 생성한 후 start() 메서드를 호출하여 스레드를 실행합니다.
```java class MyThread extends Thread { @Override public void run() { System.out.println("스레드가 실행 중입니다.
"); } } public class Main { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // run() 메서드가 새로운 스레드에서 실행됨 } } ``` 2. Runnable 인터페이스 구현하기 - Runnable 인터페이스의 run() 메서드를 구현한 클래스를 작성합니다.
- Thread 클래스 생성자의 인자로 해당 Runnable 객체를 전달합니다.
- Thread 인스턴스에서 start() 메서드를 호출하여 스레드를 실행합니다.
```java class MyRunnable implements Runnable { @Override public void run() { System.out.println("Runnable 스레드가 실행 중입니다.
"); } } public class Main { public static void main(String[] args) { Thread thread = new Thread(new MyRunnable()); thread.start(); } } ``` 참고 사항 - 직접 run() 메서드를 호출하면 새로운 스레드가 생성되지 않고 호출한 현재 스레드 내에서 실행됩니다.
따라서 반드시 start() 메서드를 호출해야 합니다.
- Runnable 인터페이스를 사용하는 방법은 다중 상속이 불가능한 자바에서 다른 클래스를 상속받으면서 동시에 스레드를 생성하고자 할 때 유용합니다.
- 자바 8 이후에는 람다 표현식을 이용하여 Runnable 인터페이스를 보다 간결하게 작성할 수도 있습니다.
```java public class Main { public static void main(String[] args) { Thread thread = new Thread(() -> { System.out.println("람다로 생성된 스레드 실행 중"); }); thread.start(); } } ``` 이처럼 자바에서는 Thread 클래스를 직접 상속하거나 Runnable 인터페이스를 구현하여 스레드를 생성하고, start() 호출로 실행시킬 수 있습니다.