본문 바로가기

수업 & 공부

Thread (lambda)

Thread

하나의 프로세스(실행중인 프로그램) 안에서 실질적인 작업을 처리하는 하나하나의 단위

(JVM에서 하나의 프로세스가 수행되고 main문 안의 실행문들이 하나의 스레드)


람다식을 사용하여 스레드 생성

public class LambdaThread {

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            int num = i;
            new Thread(()-> {
                System.out.println(num +" start lambda Thread");
                try{
                    Thread.sleep(1000);
                }
                catch(Exception ignored){
                }
                System.out.println(num + " end lambda Thread : ");
            }).start();
        }
        System.out.println("main end");
        
}

Runnable 인터페이스 run()을 람다식으로 구현

(Thread 클래스는 start메소드를 실행하면 run()메소드가 수행되도록 내부적으로 동작한다.)

 

10개의 스레드의 동작을 보기위해 숫자를 붙여준다.

스레드 시작과 종료 사이에는 1000ms의 딜레이를 주고

메인 메소드 종료시 main end를 출력한다

 

스레드가 여러개 동시에 실행되어 순서가 일정하지 않은 것을 볼 수 있다.

그리고 중간에 main메소드가 종료됐다

 

 

join()

join() 메소드로 스레드 실행과 종료가 다 끝나고 main메소드가 종료되도록 순서를 주자

join() 메소드는 join()메소드를 호출한 스레드 작업이 모두 끝날때 까지 다른 스레드를 기다린다.

import java.util.ArrayList;

public class LambdaThread {

    public static void main(String[] args) {
        ArrayList<Thread> threads = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            int num = i;
            Thread t = new Thread(()->{
                System.out.println(num +" start lambda Thread");
                try{
                    Thread.sleep(1000);
                }
                catch(Exception e){
                    e.printStackTrace();
                }
                System.out.println(num + " end lambda Thread : ");
            });
            t.start();
            threads.add(t);
        }
        
        for (Thread thread : threads) {
            try {
                thread.join();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println("main end");
    }

}

생성된 스레드를 ArrayList에 담아주고

메소드가 종료되기 전 리스트에 담긴 스레드들을 join()함수를 호출하여 스레드가 종료될때 까지 대기해준다.

(만약 리스트에 담는대신 join함수를 써주면 지금 실행중인 스레드가 종료될때 까지 대기하니

0번 스레드가 실행 -> 1초뒤 -> 스레드 종료, 1번 실행... 반복)

 

 

동기화(synchronized)

 

 

 

 

 


 

07-05 쓰레드(Thread)

동작하고 있는 프로그램을 프로세스(Process)라고 한다. 보통 한 개의 프로세스는 한 가지의 일을 하지만, 쓰레드를 이용하면 한 프로세스 내에서 두 가지 또는 그 이상의 ...

wikidocs.net

 

[Java] 자바 Thread(스레드) 사용법 & 예제

 Thread란? 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위를 말하며, 세부적으로는 운영체제에 의해 관리되는 하나의 작업 혹은 태스크를 의미합니다. 스레드와 태스크(혹은

coding-factory.tistory.com

 

 

자바 Thread 실행 순서 제어 - Thread.join() 분석

멀티 스레드 프로그래밍 환경에서는 멀티 스레드에 대한 실행 순서를 제어하는 것이 중요하다. OS는 멀티 스레드에 대한 실행한 순서를 보장하지 않는다. 따라서 운이 좋으면(?) 맨 마지막에 호

defacto-standard.tistory.com

 

'수업 & 공부' 카테고리의 다른 글

KAFKA  (0) 2022.10.07
Stream  (0) 2022.10.03
lambda  (0) 2022.10.01
Wrapper Class란  (0) 2022.09.29
Java - Collection  (0) 2022.09.29