자바 공부/자바

Java(자바)-Thread(스레드) 사용법

ari0930 2024. 9. 9. 14:27

Java(자바)-Thread(스레드) 사용법

 

Thread(스레드)란?

동작하고 있는 프로그램을 프로세스라고 한다.

보통 한 개의 프로세스는 한 가지 일을 하지만 스레드는 두 가지 이상의 일을 동시에 할 수 있다. 

 

스레드 구현하기 위해서는 스레드 클래스를 구현해야 한다.

스레드 클래스는 상속으로 Thread 를 상속하여 구현할 수 있다.

public class MainThread extends Thread{

    private int a;

    // 생성자를 통해 매개변수 전달
    public MainThread(int a) {
        this.a = a;
    }
    @Override
	public void run() {

			System.out.println("현재 스레드: "+a);
			
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i=0;i<10;i++) {
			MainThread mainThread = new MainThread(i);
			mainThread.start();
		}
			System.out.println("메인종료");
	}

}

 

run 메서드 안에서 구현하고자 하는 기능을 구현하면 동시에 동작하도록 만들 수 있다.

스레드를 동작하게 하기 위해서는 스레드클래스이름.start() 메서드를 통해 만든 스레드 클래스를 실행할 수 있다.

 

위코드 실행 시키면 

메인종료

현재 스레드: 3
현재 스레드: 0
현재 스레드: 9
현재 스레드: 8
현재 스레드: 6
현재 스레드: 4
현재 스레드: 5
현재 스레드: 2
현재 스레드: 7
현재 스레드: 1

이런식으로 순서대로 번호가 출력되지 않는다.

 

 

sleep 사용법

스레드가 일정 시간 동안 코드가 진행되지 않도록 하는 메서드

			try {
				Thread.sleep(1000);
			}catch (InterruptedException e) {
				// TODO: handle exception
			}

이렇게 사용할수 있으면 1초 동안 스레드가 진행을 멈출 수 있다.

 

 

join 사용법

앞의 코드들을 실행시켜보면 분명 마지막에  " 메인 종료"라는 코드를 작성했지만 "메인 종료"가 스레드로 동작하는 코드보다 먼저 나타난다. 이 말은 main에 작성된 것이 먼저 종료되어 버린 걸 의미하는데 join을 이용하면 스레드가 종료될 때까지 대기하고 

main을 종료 할 수 있다.

package study;

import java.util.ArrayList;

public class MainThread extends Thread{

    private int a;

    // 생성자를 통해 매개변수 전달
    public MainThread(int a) {
        this.a = a;
    }
    @Override
	public void run() {

			System.out.println("현재 스레드: "+a);
			
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Thread> threads = new ArrayList<Thread>();
		for (int i=0;i<10;i++) {
			MainThread mainThread = new MainThread(i);
			mainThread.start();
			threads.add(mainThread);
		}
		

		
        for(int i=0; i<threads.size(); i++) {
            Thread t = threads.get(i);
            try {
                t.join(); // t 쓰레드가 종료할 때까지 기다린다.
            }catch(Exception e) {
            }
        }
        
		System.out.println("메인종료");
			
	}

}

 

 

Runnable 인터페이스로 정의한 스레드

사용하는 이유는 다중 상속을 위해서 인터페이스로 정의하여 사용할 수 있다.

package studyThread;

import java.util.ArrayList;

public class RunnableThread implements Runnable{
    private int a;

    // 생성자를 통해 매개변수 전달
    public RunnableThread(int a) {
        this.a = a;
    }
	
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("현재 스레드: "+a);
	}
	


}

// 다른 메인 클래스에서 

	public static void main(String[] args) {
		// TODO Auto-generated method stub
			
			RunnableThread rt=new RunnableThread(10);
			Thread m_Thread  =new Thread(rt);
			m_Thread.start();
			
			
	}
	이렇게 사용 할 수 있으면 결과값은 
	현재 스레드 10 이 나온다.

 

반응형

'자바 공부 > 자바' 카테고리의 다른 글

자바 추상클래스,인터페이스  (1) 2024.04.14
자바 - JDBC  (0) 2024.04.10
자바 접근제한자  (0) 2024.04.10
자바 클래스  (0) 2024.04.10
자바 메서드  (0) 2024.04.05