Q1. 패키지 오류 수정하기

import 문에 HousePark 클래스가 속한 패키지 이름을 명시하지 않아 오류가 발생한다. import 대상의 이름을 house.HousePark으로 수정한다.

import house.HousePark; // 'house.'이 누락되었다.
 
// ...

Q2. 예외 처리하기

제시된 코드의 실행 결과는 7이다.

int b = a[3]; 문장에 의해 ArrayIndexOutOfBoundsException이 발생한다. 이에 대응하는 catch 절이 실행되어 변수 result의 값은 3이 된다. 이어서 finally 절이 실행되어 변수 result의 값은 7이 된다.

Q3. 스레드 적용하기

HeavyWork 클래스가 Runnable 인터페이스를 구현하도록 수정한다. 5개의 Thread 인스턴스를 생성하여 HeavyWork 클래스의 작업을 동시에 실행한다.

코드 수정 결과 실행 소요 시간이 566 ms로 감소했다.

import java.util.ArrayList;
 
class HeavyWork implements Runnable {
    String name;
 
    HeavyWork(String name) {
        this.name = name;
    }
 
    @Override
    public void run() {
        work();
    }
 
    public void work() {
        for (int i = 0; i < 5; i++) {
            try {
                Thread.sleep(100);
            } catch (Exception e) {
            }
        }
        System.out.printf("%s done.\n", this.name);
    }
}
 
public class Sample {
    public static void main(String[] args) throws InterruptedException {
        long start = System.currentTimeMillis();
 
        ArrayList<Thread> threads = new ArrayList<>();
        for (int i = 1; i < 5; i++) {
            Thread t = new Thread(new HeavyWork("w" + i));
            threads.add(t);
            t.start();
        }
        for (Thread t : threads) {
            t.join();
        }
 
        long end = System.currentTimeMillis();
        System.out.printf("elapsed time:%s ms\n", end - start);
    }
}