본문 바로가기
웹개발/java

[자바]쓰레드 기초개념

by 지구별 여행자 임탱 2024. 1. 31.
728x90

자바로 만든 프로그램이 있고 그 프로그램을 동작하게 하는 것이 프로세스(Process)라고 한다. 

보통 한 개의 프로세스는 한가지의 일을  하지만 쓰레드(thread)를 이용하면 한 프로세스 내에 두가지 또는 그 이상의 일을 동시에 할 수 있다.

쓰레드라는 단어는 자바에서만 사용하는 것이 아닌 운영체제 프로세스의 한부분이고

자바에서 이 쓰레드를 사용하려고 관련 된 클래스가 있는 것이다.

자바에서 쓰레드를 생성 하는 방법에는 Runnable 인터페이스를 구현하는 방법과 Thread클래스를 상속받아 구현하는 방법이 있다.

Thread 클래스를 상속받는 방법은 상속 자체가 한번만 쓸 수 있기 때문에 

다중 쓰레드를 구현 할때는 Runnable인터페이스를 활용한다.

 

Thread

public class ThreadTest extends Thread{
    //Thread를 상속하면 run메소드를 구현해야 한다.
    @override
    public void run(){
    	for(int i=0; i<10; i++){
            System.out.println("thread===>"+i);
        }
    }

    public static void main(String[] args){
        ThreadTest tt = new ThreadTest();
        tt.start();
    
        for(int i=0; i<10; i++){
            System.out.println("main===>"+i);
        }
    }
}

 

Runnable

public class ThreadRunnable implemetns Runnable{
    @override
    public void run(){
    	for(int i=0; i<10; i++){
            System.out.println("thread===>"+i);
        }
    }

    public static void main(String[] args){
        Thread tt = new Thread(new ThreadRunnable());
        tt.start();
    
        for(int i=0; i<10; i++){
            System.out.println("main===>"+i);
        }
    }
}

 

sleep

쓰레드 작업을 일시 정지할때 사용한다.

Thread.sleep(1000); //1초 정지 후 실행 된다.

 

join

쓰레드가 끝나기도 전에 쓰레드를 실행 시킨 메소드의 작업이 먼저 종료가 된다.

만일 쓰레드가 종료 되기전에 메소드의 작업이 종료되는 것을 방지 하고자 할 때 join을 사용한다.

public class ThreadTest extends Thread{
    //Thread를 상속하면 run메소드를 구현해야 한다.
    @override
    public void run(){
    	for(int i=0; i<10; i++){
            System.out.println("thread===>"+i);
        }
    }

    public static void main(String[] args){
        ThreadTest tt = new ThreadTest();
        tt.start();
        
        try{
            tt.join();  
        }catch(Exception e){
            
        }
        
        for(int i=0; i<10; i++){
            System.out.println("main===>"+i);
        }
    }
}

 

데몬 쓰레드

자바에서 쓰레드 백그라운드에서 실행 되는 낮은 우선순위를 가진 쓰레드로 메인 쓰레드의 보조적인 역할을 한다.

TreadTest tt = new ThreadTest();

tt.setDaemon(true);  //true로 설정 시 데몬스레드로 동작

tt.start();

 

 

'웹개발 > java' 카테고리의 다른 글

[자바]JPA 객체 매핑  (0) 2024.02.02
[자바]JPA 기초 이론  (0) 2024.02.02
자바 표기법  (0) 2024.01.29
오토박싱, 언박싱(Autoboxing, Unboxing)  (0) 2024.01.23
자바 Map NullPointException 발생 문제  (0) 2024.01.23