상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
두바이에서의 쇼와 공연 추천은 무엇인가요?
두바이에서의 캠핑 장소는 어디인가요?
듀스 상황에서는 어떻게 점수를 계산하나요?
'서브를 넣을 때의 공의 속도'는 어떻게 조절하나요?
피자 사이즈가 작은 경우, 어떤 피자 조합이 좋나요?
선인장을 기르는 데 필요한 공간은 얼마나 되나요?
선인장을 기르는 데 필요한 조명 조건은 무엇인가요?
선인장을 기르는 데 필요한 조명 조건은 어떻게 되나요?
앵무새의 기르는 데 드는 비용은 얼마인가요?
앵무새의 기르는 데 필요한 공간은 얼마나 되나요?
앵무새의 건강을 체크하는 주기는 어떻게 되나요?
창저우의 스마트 시티 계획은 무엇인가요?
Previous
Next
수정하기 - 자바에서 멀티스레딩(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순위입니다.
수정하기
취소하기