-
16일 차 Thread(쓰레드) 동기화 문제삼성SDS_멀티캠퍼스/Java 2015. 9. 30. 11:21반응형
public class BankAccount {
private int balance;
public void deposit(int account) {
balance += account;
}
public void withdraw(int account) {
balance -= account;
}
public int getBalance() {
return balance;
}
}
public class User implements Runnable {private BankAccount account;public User(BankAccount account) {this.account = account;}public void run() {// TODO Auto-generated method stubfor (int i = 0; i < 1000; i++) {account.deposit(10000);try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}account.withdraw(10000);if (account.getBalance() < 0 || account.getBalance() > 20000) {System.out.println(account.getBalance() + "원 ??");}}}}public class Test3 {public static void main(String[] args) {BankAccount account = new BankAccount();Thread one = new Thread(new User(account));Thread two = new Thread(new User(account));one.start();two.start();}}값이 계속 변한다.
어떨때는 -20000원이 나올때도 있다.
이유는 연산을 할 수 있는 곳은 CPU밖에 없기 때문에
계산할 때, 순서의 문제때문에 이런 결과가 나온다.
반응형'삼성SDS_멀티캠퍼스 > Java' 카테고리의 다른 글
16일 차 Thread(쓰레드)를 이용하여 발사 카운트 시키기 (0) 2015.09.30 16일 차 Thread(쓰레드)로 1초에 한번씩 현재시간과 인삿 말 출력 (0) 2015.09.30 15일 차 도서 대여 프로그램 (0) 2015.09.25 15일 차 Map (0) 2015.09.25 15일 차 HashSet을 이용한 로또 번호 추출기 (0) 2015.09.25