본문 바로가기
Java (국비)/Java 문제

Thread 문제

by Hwanii_ 2023. 5. 22.
728x90

Thread : 메모리를 할당받은 프로세스에서 실질적인 작업을 수행하는 주체.

 

Process : "실행중인 프로그램" 을 의미.

 

문제 요구 조건 :

 

1. 가족이 공유의 계좌를 사용 한다.

2. 가족은 총 3명이고, 계좌의 잔고는 1만원이다.

3. 돈은 항상 5천원을 사용하고, 돈이 5천원 보다 적으면 결제 실패 문구가 뜨게.

 

포인트 :

 

1. Thread 클래스를 상속받는 클래스는

Thread 클래스의 run() 메서드를 오버라이딩 해서 사용 해야 한다.

why ?

Family 클래스를 객체화 해서, 객체화된 가족이 계좌를 사용해야하는 상황이므로 !

=>

Thread는 참조변수.start() 메서드로 수행을 시작하면, 바로 내부의 run() 메서드를 수행 한다.

이 run() 메서드를 오버라이드 해서 이 메서드 안에 가족이 계좌를 사용하는 기능을 만들어야 한다.

 

2. 계좌는 공유 하는 상황이므로, 전부 객체와 무관한 상황 이다.

 

3. 결제 기능을 사용하는 주체는 위에서 말했듯이 가족이다.

 

이클립스에서 구현

 

 

1. Thread 클래스를 상속받은 Family 클래스.

2. pay()는 Account 클래스에 있는 메서드 이기 때문에,

Family 클래스에서 이 메서드를 사용하기 위해서는

객체를 만들어 줘야 한다.

3. 참조변수.메서드()로 메서드를 호출한다.

 

 

1. money 는 클래스 변수 이다.

2. pay() 메서드는 동기화가 필요하기 때문에, synchronized를 붙혀준 모습.

 

동기화 == synchronized :

공유자원을 어떤 스레드가 점유할때, 다른 스레드의 접근을 막음.

 

3. 알 수 있는 부분 :

 

Thread 클래스가 실제로는 복잡하게 구성 되어 있겠지만,

getName() 메서드. 즉, 게터가 있기 때문에 !

private String name의 멤버변수를 가지고 있다는 것을 유추 할 수 있다.

 

 

1. Thread 클래스를 3개 인스턴스한 모습을 볼 수 있다.

 

2.

생성자로, 

Thread(Thread thread,String name) {

this.name = name;

}

을 가지고 있음을 알 수 있다.

 

기본생성자로는,

Thread() {
   this(new Thread(),null);
 }

을 가지고 있음을 알 수 있다.

 

3. 참조변수를 넣어야 하기 때문에,

Family의 객체를 만들어 줘야 2번이 성립 될 수 있다.

 

4.

3개의 객체가

참조변수.start()로 수행을 하고

3개의 객체가 run()을 하게 된다.

=> 독립적으로 일을 수행 한다.

 

결과 :

 

엄마

아빠

나 

순으로 수행했지만

 

실제 결과는 

엄마

아빠

순으로 수행된 모습을 볼 수 있다.

 

Console

반응형

'Java (국비) > Java 문제' 카테고리의 다른 글

23.05.26 문제 2  (0) 2023.05.26
23.05.26 문제 1  (0) 2023.05.26
예외처리 문제  (0) 2023.05.20
배열리스트 문제 2  (0) 2023.05.20
배열리스트 문제  (0) 2023.05.20