상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - 자바에서 멀티스레딩(Multithreading)을 구현하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
<a href='https://sangseek.com/sangseeks/자바/ko'>자바</a>에서 멀티스레딩(Multithreading)을 구현하는 방법은 여러 가지가 있으며, 주로 두 가지 방식으로 나눌 수 있습니다: `Thread` 클래스를 상속받는 방법과 `R<a href='https://sangseek.com/sangseeks/unnable/ko'>unnable</a>` 인터페이스를 구현하는 방법입니다. 이 두 가지 방법을 통해 자바에서 멀티스레드를 생성하고 관리할 수 있습니다. 1. Thread 클래스 상속하기자바에서 `Thread` 클래스를 직접 상속받아 새로운 스레드를 생성할 수 있습니다. 이 방법은 스레드의 동작을 정의하는 `run()` 메서드를 오버라이드하여 구현합니다.```javaclass MyThread extends Thread { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " - Count: " + i); try { Thread.sleep(1000); // 1초 대기 } catch (InterruptedException e) { e.printStackTrace(); } } }}public class Main { public static void main(String[] args) { MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); thread1.start(); // 스레드 시작 thread2.start(); // 스레드 시작 }}``` 2. Runnable 인터페이스 구현하기`Runnable` 인터페이스를 구현하는 방법은 스레드의 동작을 정의하는 `run()` 메서드를 포함하는 클래스를 작성하고, 이를 `Thread` 클래스의 생성자에 전달하여 스레드를 생성하는 방식입니다. 이 방법은 다중 상속이 필요한 경우 유용합니다.```javaclass MyRunnable implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " - Count: " + i); try { Thread.sleep(1000); // 1초 대기 } catch (InterruptedException e) { e.printStackTrace(); } } }}public class Main { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread1 = new Thread(myRunnable); Thread thread2 = new Thread(myRunnable); thread1.start(); // 스레드 시작 thread2.start(); // 스레드 시작 }}``` 3. 스레드의 상태스레드는 다음과 같은 여러 상태를 가질 수 있습니다:- NEW : 스레드가 생성되었지만 아직 실행되지 않은 상태.- RUNNABLE : 스레드가 실행 중이거나 실행 대기 중인 상태.- BLOCKED : 다른 스레드에 의해 잠금이 걸려 실행되지 않는 상태.- WAITING : 다른 스레드의 특정 작업이 완료되기를 기다리는 상태.- TIMED_WAITING : 지정된 시간 동안 대기하는 상태.- TERMINATED : 스레드의 실행이 완료된 상태. 4. 스레드 동기화멀티스레딩 환경에서는 여러 스레드가 동일한 자원에 접근할 때 데이터의 일관성을 유지하기 위해 동기화가 필요합니다. 자바에서는 `synchronized` 키워드를 사용하여 메서드나 블록을 동기화할 수 있습니다.```javaclass Counter { private int count = 0; public synchronized void increment() { count++; } public int getCount() { return count; }}class MyRunnable implements Runnable { private Counter counter; public MyRunnable(Counter counter) { this.counter = counter; } @Override public void run() { for (int i = 0; i < 1000; i++) { counter.increment(); } }}public class Main { public static void main(String[] args) { Counter counter = new Counter(); Thread thread1 = new Thread(new MyRunnable(counter)); Thread thread2 = new Thread(new MyRunnable(counter)); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Final Count: " + counter.getCount()); }}``` 5. <a href='https://sangseek.com/sangseeks/ExecutorService/ko'>ExecutorService</a> 사용하기자바 5부터는 `ExecutorService`를 사용하여 <a href='https://sangseek.com/sangseeks/스레드 풀/ko'>스레드 풀</a>을 관리할 수 있습니다. 이는 스레드를 효율적으로 관리하고, 자원 낭비를 줄이는 데 유용합니다.```javaimport java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;class MyRunnable implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is executing."); }}public class Main { public static void main(String[] args) { ExecutorService executorService = Executors.newFixed<a href='https://sangseek.com/sangseeks/ThreadPool/ko'>ThreadPool</a>(3); for (int i = 0; i < 10; i++) { executorService.execute(new MyRunnable()); } executorService.<a href='https://sangseek.com/sangseeks/shutdown/ko'>shutdown</a>(); // 모든 작업이 완료될 때까지 대기 }}``` 결론자바에서 멀티스레딩을 구현하는 방법은 다양하며, 각 방법은 특정 상황에 따라 장단점이 있습니다. `Thread` 클래스를 직접 사용하는 방법은 간단하지만, `Runnable` 인터페이스를 사용하면 더 유연한 설계가 가능합니다. 또한, 스레드 동기화와 `ExecutorService`를 활용하면 멀티스레드 프로그래밍을 보다 효율적으로 관리할 수 있습니다. 멀티스레딩을 사용할 때는 항상 데이터의 일관성과 스레드 간의 상호작용을 신중하게 고려해야 합니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기