본문 바로가기

Java 공부/신용권의 이것이 자바다

멀티스레드(Multi Thread) 연습

반응형

정말 오랜만에 다시 컴퓨터를 켜고 자바(Java) 프로그래밍 공부를 했다.

그중에서도 오늘은 수업을 진행할 때, 복습하지 못한 멀티스레드 개념과 그것을 구현하는 프로그램을 작성해 보았다.

멀티스레드는 하나의 프로세스에 여러 개의 스레드가 작동하는 것을 말한다.

싱글스레드 애플리케이션에서는 메인 스레드가 종료되면 프로세스도 종료된다.

하지만 멀티스레드 애플리케이션에서는 실행중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다.

즉, 메인스레드가 작업스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이라면 프로세스는 종료되지 않는 것이다.

스레드를 생성하는 방법에는 크게 세 가지가 있다.

1) 그 중 하나는 스레드 클래스로부터 직접 생성하는 것으로, Runnable을 매개값으로 인터페이스 타입의 구현객체를 만드는 것이다.

이를 위해서는 먼저 인터페이스 클래스를 만든다.

ex) Class Task implements Runnable {

      public void run() {  

      스레드가 실행할 코드;

    }

}

그러고 나서 이것을 기초로 실행 클래스를 만들면 다음과 같다.

ex) Runnable task = new Task();

      Thread thread = new Thread(task);

2) 두번째로는 코드를 좀더 절약하기 위해, Thread  생성자를 호출할 때 Runnable 익명 개체를 매개값으로 사용할 수도 있다.

ex) Thread thread = new Thread(new Runnable() {

       public  void run() {

      스레드가 실행할 코드;

      }

  });

3) 세번째로는 람다식을 매개값으로 사용하는 것이다.

이것은 정말 간단한 방법이다.

자바8부터 지원된 람다식을 활용해보자!

ex) Thread thread = new Thread( () -> {

      스레드가 실행할 코드;

   });


이것들 중 하나를 골라 코드를 작성한 뒤에는 꼭 

thread.start(); 

라고, start() 메소드를 호출해 줘야만 작업이 시작된다.


참고로 스레드는 '우선순위(Priority)방식'과 '순환할당(Round-Robin)방식'이 있다.

'우선순위방식'은 순위가 높은 스레드가 실행상태를 더 많이 가지도록 스케줄링하는 방식을 말한다.

'순환할당방식'은 시간할당량을 정해서 하나의 스레드를 정해진 시간만큼 실행하고, 다시 다른 스레드를 실행하는 방식으로 이것은 개발자가 코드로 제어할 수 없다.

자바는 순환할당방식으로 작동되어 코드로 제어할 수 없다.



반응형