1. 자바에서 멀티 스레딩(Multi-threading)에 대해 알아 보자.
자바에서 멀티 스레딩(Multi-threading)은 프로그램의 여러 부분이 동시에 실행되도록 하는 기술입니다. 이
를 통해 자원의 효율적 사용과 응용 프로그램의 반응성 향상을 달성할 수 있습니다. 멀티 스레딩은 하나의 프
로세스 내에서 여러 개의 스레드를 생성하여 각 스레드가 작업을 수행하도록 함으로써 병렬 처리를 가능하게
합니다.
정리
-여러 thread가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과
-thread는 각각 자신만의 작업 공간을 가짐(call stack)
각 thread 사이에서 공유하는 자원이 있을 수 있음(자바에서는 static instance)
-여러 thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생
할 수 있음
-이렇게 여러 thread 가 공유하는 자원중 경쟁이 발생하는 부분을 critical section이라고 함
-citical section에 대한 동기화(일종의 순차적 수행)를 구현하지 않으면 오류가 발생할 수 있음
시니리오 코드 1
각 스레드가 공유하는 자원 만들어 보기 (sharedResource 상황을 구현해 보자)
package thread;
/**
* 각 스레드가 공유하는 자원 만들어 보기(Shared Resource) - 공유 자원
*/
public class BankAccount {
private int money = 100_000;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
// 입금
public synchronized void deposit(int money) {
int currentMoney = getMoney();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// this.money += money;
// 10 + 1 = 11
setMoney(currentMoney + money);
System.out.println("ATM 현재 잔액(입금) : " + getMoney());
}
// 출금
public synchronized int widthDraw(int money) {
int currentMoney = getMoney();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// 방어적 코드
if(currentMoney < money) {
System.out.println("잔액이 부족합니다");
return 0;
} else {
setMoney(currentMoney - money);
System.out.println("ATM 현재 잔액(출금) : " + getMoney());
return 0;
}
}
}
package thread;
public class Father extends Thread{
//입금 요총 --->3초
BankAccount bankAccount;
public Father(BankAccount bankAccount){
this.bankAccount = bankAccount;
}
@Override
public void run() {
//계좌 입금요청---3초걸림 Thread로 구성
bankAccount.deposit(10000);
}
}
package thread;
public class Mother extends Thread{
BankAccount bankAccount;
public Mother(BankAccount bankAccount){
this.bankAccount = bankAccount;
}
@Override
public void run() {
//계좌에 출금요청 0.5초걸림
bankAccount.widthDraw(5_000);
}
}
'JAVA 유용한 클래스' 카테고리의 다른 글
(JAVA)컬렉션 프레임워크(collection framework)란? - 8 (0) | 2025.05.07 |
---|---|
(JAVA)inner class (중첩 클래스) - 7 (0) | 2025.04.25 |
(JAVA)자바 Thread - 5 (0) | 2025.04.25 |
(JAVA)Exception(예외처리) (0) | 2025.04.24 |
(JAVA)String, StringBuffer (0) | 2025.04.24 |