자바

[스레드] 2. 작업 스레드 생성과 실행 - 1

devjones 2021. 12. 29. 21:27

몇 개의 작업을 병렬로 실행할지 결정

메인작업: 메인스레드(프로그램 시작)

작업1: 스레드1(네트워킹)

작업2: 스레드2(드로잉)

 

작업 스레드 생성방법

-> Thread 클래스로부터 직접 생성

-> Thread 하위 클래스로부터 생성

 

Thread 클래스로부터 직접 생성

class Task implements Runnable {
    @Override
    public void run() {
        // 스레드가 실행할 코드;
    }
}

위 작업을 실행하는 방법1)

Runnable task = new Task();
Thread thread = new Thread(task);
        
thread.start(); // 작업실행

방법2)

Thread thread = new Thread(new Runnable() {
	@Override
	public void run() {
	    // 스레드가 실행할 코드;
	}
});

thread.start(); // 작업실행

방법3)

Thread thread = new Thread(() -> {
    // 스레드가 실행할 코드;
});
thread.start(); // 작업실행

 

 

예제

package main;

import java.awt.*;

public class BeepPrintExample1 {
    public static void main(String[] args) {
        // 비프음을 5번 반복해서 소리나게 하는 작업
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        for (int i = 0; i < 5; i++) {
            toolkit.beep();

            try {
                Thread.sleep(500);  // 스레드 일시정지
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        // "띵" 문자열을 5번 출력하는 작업
        for (int i = 0; i < 5; i++) {
            System.out.println("띵");

            try {
                Thread.sleep(500);  // 스레드 일시정지
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

위 예제는 비프음5번 후, 띵문자열을 5번 출력한다.

비프음과 동시에 띵문자열을 출력해보자.

package main;

import java.awt.*;

public class BeepTask implements Runnable {
    @Override
    public void run() {
        // 비프음을 5번 반복해서 소리나게 하는 작업
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        for (int i = 0; i < 5; i++) {
            toolkit.beep();

            try {
                Thread.sleep(500);  // 스레드 일시정지
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
package main;

import java.awt.*;

public class BeepPrintExample2 {
    public static void main(String[] args) {
        Runnable beepTask = new BeepTask();
        Thread thread = new Thread(beepTask);
        thread.start();

//        Thread thread = new Thread(new Runnable() {
//            @Override
//            public void run() {
//                // 비프음을 5번 반복해서 소리나게 하는 작업
//                Toolkit toolkit = Toolkit.getDefaultToolkit();
//                for (int i = 0; i < 5; i++) {
//                    toolkit.beep();
//
//                    try {
//                        Thread.sleep(500);  // 스레드 일시정지
//                    }catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                }
//            }
//        });
        
//        Thread thread = new Thread(() -> {
//            // 비프음을 5번 반복해서 소리나게 하는 작업
//            Toolkit toolkit = Toolkit.getDefaultToolkit();
//            for (int i = 0; i < 5; i++) {
//                toolkit.beep();
//
//                try {
//                    Thread.sleep(500);  // 스레드 일시정지
//                }catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        });
                

        // "띵" 문자열을 5번 출력하는 작업
        for (int i = 0; i < 5; i++) {
            System.out.println("띵");

            try {
                Thread.sleep(500);  // 스레드 일시정지
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}