문제
- 초기계좌에는 10000원이 있다.
- 강남지점에서는 2000원씩 입금한다.
- 인터넷지점에서는 1500원씩 입금한다.
package training;
import java.util.Scanner;
class Account1 {
private int money;
public Account1(int m) {
money = m;
}
synchronized void input(int amount, String name) {
money += amount;
System.out.println(name+": 입금 금액--> "+amount);
}
synchronized void output(int amount, String name) {
if ((money-amount)>0) {
Thread.yield();
money-=amount;
System.out.println(name+": 출금금액--> "+amount);
}
else {
System.out.println(name+"잔액부족");
}
}
public void getmoney() {
System.out.println("잔액: "+money);
}
}
class Using_input extends Thread{ //강남지점에서 2000원씩 입금하는 계좌
Account1 acc;
int amount;
int n;
public Using_input(Account1 acc, String name, int n) {
super(name);
this.acc=acc;
this.n=n;
}
public void run() {
for(int i=0;i<n;i++) {
try {
sleep(500);
} catch (InterruptedException e) {}
acc.input(2000, getName());
acc.getmoney();
}
}
}
class Using_output extends Thread { //인터넷 지점에서 1500원씩 출금하는 계좌
Account1 acc;
int amount;
int n;
public Using_output(Account1 acc, String name, int n) {
super(name);
this.acc=acc;
this.n=n;
}
public void run() {
for(int i=0;i<n;i++) {
try {
sleep(500);
} catch (InterruptedException e) {}
acc.output(1500, getName());
acc.getmoney();
}
}
}
public class ThreeBanks {
public static void main(String[] args) {
Account1 acc = new Account1(10000);
Scanner input = new Scanner(System.in);
int g,i;
System.out.println("강남지점에서 몇 번 입금하고 인터넷지점에서 몇 번 출금할 것인가?");
g=input.nextInt();
i=input.nextInt();
Using_input Gangnam = new Using_input(acc, "강남지점",g);
Using_output Internet = new Using_output(acc, "인터넷지점",i);
Gangnam.start();
Internet.start();
}
}
이전에 만든 은행계좌 프로그램을 조금 응용해서 만들었습니다. 원래는 입금과 출금을 하나의 Using메소드를 이용했는데 그렇게 하니깐 강남과 인터넷 지점이 출금과 입금이 동시에 되었습니다.
그래서 Using을 분리 시켜서 메소드를 만들었는 데 더 편한 것 같았습니다.
'Java > JAVA8' 카테고리의 다른 글
[자바] 함수형 인터페이스(Predicate) (0) | 2021.07.18 |
---|---|
[자바] 원 반지름을 랜덤으로 선언해 가장 큰 원 넓이 구하기 (0) | 2021.07.01 |
[자바] 2개의 주사위의 숫자를 랜덤으로 출력(스레드 이용) (0) | 2021.07.01 |
[자바] 스레드를 이용해서 3개의 cpu이용하기 (0) | 2021.07.01 |
[자바]earnings()와 toString()메소드 완성시키기 (0) | 2021.07.01 |