본문 바로가기

라이브러리 활용 - 멀티 스레드

작업 스레드 생성과 실행

작업 스레드

  • 멀티 스레드 프로그램을 개발 시 먼저 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성


    출처, 이것이 자바다


Thread 클래스로 직접 생성

  • java.lang 패키지에 있는 Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 Runnable 구현 객체를 매개값으로 갖는 생성자를 호출


    출처, 이것이 자바다


package ch14.sec03.exam01;

/*
 스레드 : 코드를 독립적으로 실행하는 단위.
 JVM에서는 메인 스레드라는 기본 스레드를 이용하여 main()메소드가 동작을 하게한다. 

 - 스레드 : 메인 스레드(기본)
 - 실행결과 : 작업1 -> 작업2
 */

import java.awt.Toolkit;

public class BeepPrintExample {

    public static void main(String[] args) {

        //작업1 - 소리
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        for(int i=0; i<5; i++) {
            toolkit.beep();
            try { Thread.sleep(500); } catch (Exception e) {}
        }

        //작업2 - 띵 문자열 출력
        for(int i=0; i<5; i++) {
            System.out.println("띵");
            try { Thread.sleep(500); } catch (Exception e) {}
        }
 }
}

package ch14.sec03.exam02;

/*
 스레드
   1) 메인 스레드
   2) 작업자 스레드

 실행결과 : (소리1/띵) -> (소리2/띵) -> (소리3/띵) -> (소리4/띵) -> (소리5/띵)
 메인 스레드(작업1), 작업자 스레드(작업2) 번갈아가면서 실행이 이루어진다.
 동시에 소리와 띵이 실행이 되는 것 처럼 느끼게된다.
 */

import java.awt.Toolkit;

public class BeepPrintExample {

    public static void main(String[] args) {
        //스레드 객체생성 : Runnable인터페이스를 생성자의 매개변수의 값으로 사용
        Thread thread = new Thread(new Runnable() {

            //Runnable인터페이스의 추상메소드를 구현 implement
            @Override
            public void run() {
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                for(int i=0; i<5; i++) {
                    toolkit.beep();
                    try { Thread.sleep(500); } catch (Exception e) {}
                }
            }
        });

        thread.start();

        for(int i=0; i<5; i++) {
            System.out.println("띵");
            try { Thread.sleep(500); } catch (Exception e) {}
        }
    }
}

Thread 자식 클래스로 생성

  • Thread 클래스를 상속한 다음 run() 메소드를 재정의해서 스레드가 실행할 코드를 작성하고 객체를 생성
  • 혹은 Thread 익명 자식 객체를 사용 가능


    출처, 이것이 자바다



    출처, 이것이 자바다


package ch14.sec03.exam03;

import java.awt.Toolkit;

public class BeepPrintExample {

    public static void main(String[] args) {
        //스레드 객체생성 : 익명구현객체
        Thread thread = new Thread() {
            //재정의
            @Override
            public void run() {
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                for(int i=0; i<5; i++) {
                    toolkit.beep();
                    try { Thread.sleep(500); } catch (Exception e) {}
                }
            }
        };

        thread.start();

        //메인스레드(main()메소드) 제어.
        for(int i=0; i<5; i++) {
            System.out.println("띵");
            try { Thread.sleep(500); } catch (Exception e) {}
        }
    }
}

'라이브러리 활용 - 멀티 스레드' 카테고리의 다른 글

스레드 동기화  (0) 2023.02.03
스레드 상태  (1) 2023.02.03
스레드 이름  (0) 2023.02.03
메인 스레드  (0) 2023.02.03
멀티 스레드 개념  (0) 2023.02.03