본문 바로가기
Java 강의

자바 스레드 레이스 컨디션 예제 / java thread race condition example

by 자유코딩 2017. 10. 25.

안녕하세요 이번 글에서는 스레드 레이스 컨디션의 이해를 돕는 예제에 대해서 알아보도록 하겠습니다

 

레이스 컨디션

멀티 스레드 프로그래밍에서 발생하는 문제로 여러 스레드가

다수의 리소스를 경쟁적으로 업데이트 하면 예측 불가능한 데이터 문제가 발생하는 것을 말한다

출처: http://fors.tistory.com/143 [fors]

 

예제는 1개의 은행 계좌를 가지고 두 명의 사람이 동시에 입 출금을 진행하는 예제입니다.

 

여기서 두 명의 사람은 두 개의 스레드에 해당합니다.

 

코드는 다음과 같습니다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class User implements Runnable{
    private BankAccount account;
    public User(BankAccount account) {
        this.account = account;
    }
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(this+"가 사용중입니다");//현재 사용중인 User의 인스턴스의 주소를 출력합니다
            account.deposit(10000);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(this+"가 사용중입니다");//현재 사용중인 User의 인스턴스의 주소를 출력합니다
            //두 출력문 사이에서 언제 다른 User의 인스턴스가 연산 권한을 가져가는지 알 수 있습니다
            account.withraw(10000);
            System.out.println(account.getBalance());
        }
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
public class BankAccount {
    private int balance;
    
    public void deposit(int amount) {
        balance += amount;
    }
    public void withraw(int amount) {
        balance -= amount;
    }
    public int getBalance() {
        return balance;
    }
}
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
public class BankTest {
    public static void main(String[] args) {
        BankAccount account1 = new BankAccount();
        User u1 = new User(account1);
        User u2 = new User(account1);
        Thread t1 = new Thread(u1);
        Thread t2 = new Thread(u2);
        
        t1.start();
        t2.start();    
    }
}
cs

 

출력 결과는 이렇습니다

 

 

어떤 인스턴스가 스레드를 수행중인지 알 수 있습니다.

 

설명이 부족하신 부분은 없으셨나요? jswoo030@gmail.com 으로 메일을 보내시면 빠른 답변을 받으실 수 있습니다.

댓글