티스토리 뷰


class Account {

private int total = 0;


synchronized void deposit() {

total = total + 1000;

}


int gettotal() {

return total;

}

}


class Customer extends Thread {

Account same_a;


Customer(Account a, String s) {

same_a = a;

setName(s);

}


public void run() {

for (int i = 0; i < 200; i++) {

System.out.println(getName() + " : " + i+1 + "번째");

same_a.deposit();

if (same_a.gettotal() >= 500000)

break;


// 종료 시 5개의 스레드 중에서 가장 우선순위가 높은

// 스레드가 조건문을 만족하면 (성금이 49만 9000인 경우 deposit() 후에는 50만원이 됨)

// 나머지 4개의 스레드들도 마찬가지로 조건문을 만족하게 되어 반복문이 종료된다.

// 결과적으로 후에 출력되는 총 성금은 50만 4000원이 된다.


// 결과 값이 50만 3000원이 되는 경우는

// 1번 스레드가 deposit() 메소드를 실행하고 49만 9000이 될 때

// 정상적으로는 다음 조건문을 통과하게 되지만,

// 조건문 실행 전에 다른 스레드가 deposit() 메소드를 실행되면

// 50만원으로 조건문을 만족하게 되어 반복문을 종료하게 되는데

// 이전에 실행되던 1번 스레드 또한 조건문을 만족하게 되어 종료가 되고

// 나머지 3개의 스레드가 정상 실행되어 3천원의 성금이 추가되게 된다.


}

}

}


public class TVContribution {

public static void main(String args[]) throws Exception {

int count = 0;

Account same_account = new Account();

Customer donator1 = new Customer(same_account, "1번째 성금자");

Customer donator2 = new Customer(same_account, "2번째 성금자");

Customer donator3 = new Customer(same_account, "3번째 성금자");

Customer donator4 = new Customer(same_account, "4번째 성금자");

Customer donator5 = new Customer(same_account, "5번째 성금자");


donator1.start();

donator2.start();

donator3.start();

donator4.start();

donator5.start();

donator1.join();

donator2.join();

donator3.join();

donator4.join();

donator5.join();

System.out.println("성금 총액은 : " + same_account.gettotal());

}

}


결과 : 

1번째 성금자 : 01번째

1번째 성금자 : 11번째

5번째 성금자 : 01번째

5번째 성금자 : 11번째

1번째 성금자 : 21번째


...중략...


2번째 성금자 : 701번째

4번째 성금자 : 1231번째

3번째 성금자 : 1291번째

1번째 성금자 : 1191번째

5번째 성금자 : 581번째

성금 총액은 : 504000



'java,web study > 3주차 (7월 15일 ~21일)' 카테고리의 다른 글

스레드 인터럽트  (0) 2013.07.17
데몬 스레드  (0) 2013.07.17
스레드 예제 (Bank)  (0) 2013.07.17
JTable 02  (0) 2013.07.17
JTable  (0) 2013.07.17
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함