Java(Thread)_07

2024. 11. 12. 18:17·Java/기초 내용 정리

2024-11-12

 

 

 

 

 

홍길동님이20000원을 입금하여20000원이 남았습니다.
잔액이 부족합니다.
신사임당님이20000원을 입금하여40000원이 남았습니다.
신사임당님이30000원을 출금하여10000원이 남았습니다.
세종대왕님이20000원을 입금하여30000원이 남았습니다.
세종대왕님이30000원을 출금하여0원이 남았습니다.
유관순님이20000원을 입금하여20000원이 남았습니다.
잔액이 부족합니다.
이순신님이20000원을 입금하여40000원이 남았습니다.
이순신님이30000원을 출금하여10000원이 남았습니다.

 

package basic;

/*
 *  [공용 ATM 클래스 설계서]
 *  - 입금과 출금의 은행거래가 가능한 ATM 공용 클래스 설계
 *  - 계좌잔액 : private int balance;
 *  - 생성자 : 계좌잔액(balance) 초기화.
 *  - deposit() : 외부 클래스에서 입금하는 메서드
 *    예) balance = balance + money;
 *    	출력문 : 00,000원을 입금하여 00,000원 남음.
 *  - withdraw() : 외부 클래스에 출금하는 메서드.
 *    예) balance = balance - money;
 *    	출력문 : 00,000원을 출금하여 00,000원 남음.
 *  (단, balance < money 인 경우 "잔액이 부족합니다." 라는 메세지 출력)
 */

/*
 *  synchronized 키워드
 *  - 스레드 동기화와 관련된 명령어.
 *  - 멀티 스레드에 의해서 공유된 메서드나 클래스를 대상으로 임계영역
 *    (critical section)을 설정.
 *  - 임계 영역으로 설정된 메서드에서는 가장 먼저 도착한 스레드가 작업이
 *    종료될 때 까지 나머지 스레드는 대기하는 명령어.
 *  - 공유되는 자원은 대부분 static 키워드를 가진 객체나 메서드를 말함.  
 */

class ATM {
	
	private int balance;		//  계좌잔액 변수
	
	public ATM() {}				//  기본 생성자
	
	public ATM(int balance) {
		
		this.balance = balance;
	}		//  인자 생성자
	
	//  입금을 하는 메서드.
	public synchronized void deposit(int money) {
		
		balance = balance + money;
		
		System.out.println(Thread.currentThread().getName()
				+ "님이" + money + "원을 입금하여" + balance + "원이 남았습니다.");
	}
	
	//  출금을 하는 메서드.
	public synchronized void withdraw(int money) {
		
		if (balance < money) {
			
			System.out.println("잔액이 부족합니다.");
			return;		//  현재 실행중인 메서드를 종료하는 명령어.
		}
		
		balance = balance - money;
		
		System.out.println(Thread.currentThread().getName()
				+ "님이" + money + "원을 출금하여" + balance + "원이 남았습니다.");
	}
}

class User extends Thread {
	
	ATM atm;
	
	public User() {}
	
	public User(ATM atm, String name) {
		
		super(name);
		this.atm = atm;
	}
	
	@Override
	public void run() {
	
		atm.deposit(20000);
		
		atm.withdraw(30000);
	}
}

public class Thread_07 {

	public static void main(String[] args) {
		
		ATM atm = new ATM(0);
		
		//  User 클래스를 대상으로 멀티 스레드 객체 생성.
		User user1 = new User(atm, "홍길동");
		User user2 = new User(atm, "이순신");
		User user3 = new User(atm, "유관순");
		User user4 = new User(atm, "세종대왕");
		User user5 = new User(atm, "신사임당");
		
		user1.start(); user2.start();
		user3.start(); user4.start();
		user5.start();
	}
}

'Java > 기초 내용 정리' 카테고리의 다른 글

Java(Lambda)_02  (1) 2024.11.12
Java(Lambda)_01  (0) 2024.11.12
Java(Thread)_06  (1) 2024.11.12
Java(Thread)_05  (0) 2024.11.12
Java(Thread)_04  (0) 2024.11.12
'Java/기초 내용 정리' 카테고리의 다른 글
  • Java(Lambda)_02
  • Java(Lambda)_01
  • Java(Thread)_06
  • Java(Thread)_05
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Java(Thread)_07
상단으로

티스토리툴바