728x90
더보기
Day20-3. 230525
스레드 없이 실행
은행계좌 클래스>
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
31
32
|
package Ex;
//은행계좌
public class BankAccount1 {
//필드
private int balance; //잔액
//생성자
public BankAccount1(int balance) {
this.balance = balance;
}
//메서드
//입금기능
public void deposit(int amount){
balance += amount; //balance = balance + amount
System.out.println("입금된 금액:"+amount+",현재 잔액:"+balance);
}
//출금기능
public void withdraw(int amount){
balance -= amount; //balance = balance - amount
System.out.println("출금된 금액:"+amount+",현재 잔액:"+balance);
}
//잔액조회
public int getBalance() {
return balance;
}
}
|
cs |
BankSystem1 메인 클래스>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package Ex;
public class BankSystem1 {
public static void main(String[] args) {
//계좌생성
BankAccount1 account = new BankAccount1(1000);
System.out.println("계좌생성후:"+account.getBalance());
//입금Thread
account.deposit(999);
//출금Thread
account.withdraw(9);
//잔액조회Thread
System.out.println(account.getBalance());
}
}
|
cs |
더보기
* 실행 결과
계좌생성후:1000
입금된 금액:999,현재 잔액:1999
출금된 금액:9,현재 잔액:1990
1990
스레드 사용해서 실행
은행계좌 클래스>
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
31
32
33
34
35
|
package Ex;
//은행계좌
public class BankAccount2 {
//필드
private int balance; //잔액
//생성자
public BankAccount2(int balance) {
this.balance = balance;
}
//메서드
//입금기능-sync
public synchronized void deposit(int amount){
balance += amount; //balance = balance + amount
System.out.println("입금된 금액:"+amount+",현재 잔액:"+balance);
}
//출금기능-sync
public synchronized void withdrawl(int amount){
if(balance>=amount) {
balance -= amount; //balance = balance - amount
System.out.println("출금된 금액:"+amount+",현재 잔액:"+balance);
}else {
System.out.println("잔액부족, 현재 잔액:"+balance);
}
}
//잔액조회-sync
public synchronized int getBalance() {
return balance;
}
}
|
cs |
동기화(synchronized) 스레드 사용
BankSystem2 메인 클래스>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package Ex;
public class BankSystem2 {
public static void main(String[] args) {
//계좌생성
BankAccount2 account = new BankAccount2(1000);
//입금
Thread depositTh= new Thread(new DepositTask(account));
//출금
Thread withdrawlTh= new Thread(new WithdrawlTask(account));
//잔액조회
Thread balanceTh= new Thread(new BalanceTask(account));
depositTh.start(); //입금
withdrawlTh.start(); //출금
balanceTh.start(); //잔액조회
}
}
|
cs |
더보기
* 실행 결과
입금된 금액:800,현재 잔액:1800
잔액부족, 현재 잔액:1800
현재 잔액 조회:1800
출금 업무>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package Ex;
//출금업무
public class WithdrawlTask implements Runnable {
//필드
private BankAccount2 account;//은행계좌
//생성자
public WithdrawlTask(BankAccount2 account) {
this.account = account;
}
@Override
public void run() {
account.withdrawl(20000);
}
}
|
cs |
입금 업무>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package Ex;
//입금업무
public class DepositTask implements Runnable {
//필드
private BankAccount2 account;//은행계좌
//생성자
public DepositTask(BankAccount2 account) {
this.account = account;
}
@Override
public void run() {
account.deposit(800);
}
}
|
cs |
잔액조회 업무>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package Ex;
//잔액조회 업무
public class BalanceTask implements Runnable {
//필드
private BankAccount2 account;//은행계좌
//생성자
public BalanceTask(BankAccount2 account) {
this.account = account;
}
@Override
public void run() {
int balance = account.getBalance();
System.out.println("현재 잔액 조회:"+balance);
}
}
|
cs |
728x90
'개발 수업 > JAVA' 카테고리의 다른 글
[Java] 입출력 스트림(Stream)/바이트 출력 스트림( OutputStream) (0) | 2023.05.25 |
---|---|
[Java] 람다식 (0) | 2023.05.25 |
[Java] 스레드/스레드 제어,데몬(daemon)스레드 (0) | 2023.05.25 |
[Java] 스레드/멀티 스레드(동기화(synchronized) 메소드) (0) | 2023.05.25 |
[java] 멀티 스레드/스레드(thread) (0) | 2023.05.24 |