일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 공부
- 웹
- 객체지향
- DB
- 테이블
- 프로그래밍
- Java
- UI
- Project
- javascript
- 객체지향프로그래밍
- Oracle
- 자바
- sql
- orcle
- 객제지향
- 프로젝트
- squery
- html
- 웹프로그래밍
- 코딩
- web
- 공부를열심히
- 데이터베이스
- 주말이다..
- ERWin
- 오라클
- jsp
- 객제지향프로그래밍
- CSS
Archives
- Today
- Total
햄찌개
JAVA - 쓰레드 예제 - 은행 입출금 -synchronized 본문
* 은행의 입출금을 쓰래드로 처리하는 에제
* (synchronized를 이용한 동기화 처리)
public class T16_StncAccountTest {
public static void main(String[] args) {
SyncAccount sAcc = new SyncAccount();
sAcc.setBalance(10000);//입금처리
BankThread th1 = new BankThread(sAcc);
BankThread th2 = new BankThread(sAcc);
th1.start();
th2.start();
}
}
//은행의 입출금을 관리하는 클래스 정의
class SyncAccount{
private int balance; //잔액이 저장될 변수
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
//입금 처리를 수행하는 메서드
public synchronized void deposit(int money) {
balance+= money;
}
//출금을 처리하는 메서드(출금성공 : true, 출금실패 : false반환)
//동기화 영역에서 호출하는 메서드도 동기화 처리를 해 주어야 한다.
synchronized public boolean withdraw(int money) {
if(balance >= money) {
for (int i = 1; i <= 1000000000; i++) {};//시간 지연
balance -=money;
System.out.println("메서드 안에서 balance ="+getBalance());
return true;
}else {
return false;
}
}
}
//은행 업무를 처리하는 쓰레드
class BankThread extends Thread{
private SyncAccount sAcc;
public BankThread(SyncAccount sAcc) {
this.sAcc = sAcc;
}
@Override
public void run() {
boolean result = sAcc.withdraw(6000); //6000원 인출
System.out.println("쓰레드 안에서 result =" +result+", balance ="+sAcc.getBalance());
}
}
'고급 JAVA' 카테고리의 다른 글
JAVA - 쓰레드 -syncCollection (0) | 2020.09.23 |
---|---|
JAVA - 쓰레드 예제 - 은행 입출금 - Lock (0) | 2020.09.23 |
JAVA - 쓰레드 synchronized 동기화 (0) | 2020.09.23 |
JAVA - 쓰레드에서 데이터 공통 사용 (0) | 2020.09.23 |
JAVA - 쓰레드 stop()메소드 (0) | 2020.09.23 |