티스토리 뷰
스레드는 기본적으로 메인과 따로 작동을 하기 때문에 Main 안에 어떤 순서로 스레드를 놓아도 따로따로 실행이 된다.
그러나 특정 데이터 값의 연산이나 특정 작업을 각 스레드가 모두 종료된 뒤에 실행되게끔 만드려면, 각각의 스레드가 모두 종료될 때까지 대기하다 Main을 끝마쳐야 한다.
이럴 때 사용하는 메서드가 바로 join() 메서드이다.
ARS로 모금을 진행하는 간단한 예제로 이해해보자.
○Account:
package com.choonham;
public class Account { //모금함
private int total = 0;
public Account() {
}
public void deposit() {
this.total = this.total + 1000;
}
public int getTotal() {
return total;
}
}
○Customer:
package com.choonham;
public class Customer extends Thread{
Account act = null;
public Customer() {
// TODO Auto-generated constructor stub
}
public Customer(Account c, String s) {
this.act = c;
this.setName(s);
}
public void run() {
for(int i = 0; i < 200; i++) {
System.out.println(this.getName() + " : " + i + " 번째");
act.deposit();
if(act.getTotal() > 500000) {
break;
}
}
}
}
○Main:
package com.choonham;
public class MainClass {
public static void main(String[] args) {
Account a = new Account();
Customer c1 = new Customer(a, "1번 ARS");
Customer c2 = new Customer(a, "2번 ARS");
Customer c3 = new Customer(a, "3번 ARS");
Customer c4 = new Customer(a, "4번 ARS");
Customer c5 = new Customer(a, "5번 ARS");
c1.start();
c2.start();
c3.start();
c4.start();
c5.start();
try {
c1.join();
c2.join();
c3.join();
c4.join();
c5.join();
}catch(InterruptedException e) {
System.out.println(e.getMessage());
}
System.out.println("총 모금액 : " + a.getTotal());
}
}
5개의 스레드를 모두 돌리며 총 모금액이 500000원을 넘었을 때 Main으로 돌아와 총 모금액을 출력해야한다면, 위와 같이 각각의 스레드에 join() 메서드를 모두 실행시켜 Main 메서드의 진행을 대기시킬 수 있다.
반응형
'[JAVA] > JAVA' 카테고리의 다른 글
<Thread> Thread의 단점과 Synchronized (0) | 2021.03.31 |
---|---|
<Thread> Priority 지정하기 (0) | 2021.03.31 |
<Thread> Sleep을 이용한 간단한 타이머 구현 (0) | 2021.03.31 |
<Thread> Thread 겉핥기 (0) | 2021.03.30 |
"웹 개발자 양성과정" 03.24 <Interface & Abstract Class> (0) | 2021.03.25 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- javascript
- 맛집
- await
- 인천 구월동 맛집
- react-native
- 이탈리안 레스토랑
- AsyncStorage
- Promise
- react
- redux
- Async
- 파니노구스토
- 인천 구월동 이탈리안 맛집
- 정보보안기사 #실기 #정리
- redux-thunk
- Total
- Today
- Yesterday