JAVA

자바 쓰레드

아이티프로 2023. 1. 24.
반응형

Runnable인터페이스가 가지고 있는 run()메소드를 구현한뒤, 쓰레드 생성자에 넘겨서 쓰레드를 생성

쓰레드는 프로그램내에 하나의 프로그램처럼 비동기적으로 동작한다.

 

 

데몬을 구현하거나 상호 간섭없는 병렬처리를 구현할 때 사용한다.

프로세스 갯수와 디스크, 메모리 IO에 영향을 받아 단일 쓰레드보다 느려질 수 있으므로 쓰레드갯수는 제한적으로 사용한다.

 

자바 쓰레드 예제

 

쓰레드 예제

package javaStudy;

//Runnable 인터페이스가 가지고 있는 run()메소드를 구현한다.
class MyThread implements Runnable {
	String str;
	public MyThread(String str){
		this.str = str;
	}

	public void run(){
		for(int i = 0; i < 10; i ++){
			System.out.print(str);
			try {
				Thread.sleep((int)(Math.random() * 1000));
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		} 
	} 
}

public class ThreadExam {  
	public static void main(String[] args) {
		MyThread r1 = new MyThread("*"); //r1은 쓰레드가 아님, Runnable 개체임
		MyThread r2 = new MyThread("-");

		Thread t1 = new Thread(r1);	//r1을 쓰레드 생성자에 넘겨서 쓰레드를 생성
		Thread t2 = new Thread(r2);

		t1.start();	//start()메소드로 쓰레드 실행
		t2.start();
		System.out.print("!!!!!");  
	}   
}

쓰레드 t1가 실행이 끝나고 쓰레드 t2가 실행되지 않고 t1이 start하자마자 바로 t2가 start된다.

쓰레드 t1과 쓰레드 t2는 각자의 작업이 끝나고 종료된다.

쓰레드 t1과 쓰레드 t2가 메인쓰레드도 종료된다.

 

모든 프로세스는 하나이상의 쓰레드가 존재한다.  일반적인 쓰레드는 자기역할 수행 후 종료하지만,  데몬쓰레드는 메인쓰레드가 살아있는 한 계속해서 살아서 연속적인 배치 작업이나 클라이언트로 부터의 서비스처리등의 역할을 수행한다.

 

데몬 쓰레드

package javaStudy;

// Runnable을 구현하는 DaemonThread클래스를 작성
public class DaemonThread implements Runnable {
	// 무한루프안에서 0.5초씩 쉬면서 데몬쓰레드가 실행중입니다를 출력하도록 run()메소드를 작성
	@Override
	public void run() {
		while (true) {
			System.out.println("데몬 쓰레드가 실행중입니다.");

			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
				break; //Exception발생시 while 문 빠찌도록 
			}
		}
	}

	public static void main(String[] args) {
		// Runnable을 구현하는 DaemonThread를 실행하기 위하여 Thread 생성
		Thread th = new Thread(new DaemonThread());
		// 데몬쓰레드로 설정
		th.setDaemon(true);
		// 쓰레드를 실행
		th.start();

		// 메인 쓰레드가 1초뒤에 종료되도록 설정. 
		// 데몬쓰레드는 다른 쓰레드가 모두 종료되면 자동종료.
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}   
		System.out.println("메인 쓰레드가 종료됩니다. ");    
	}   
}

 

 

 

 

반응형

'JAVA' 카테고리의 다른 글

자바 hashmap  (0) 2023.01.24
자바 파일입출력  (0) 2023.01.24
URLConnection객체 : 웹페이지 가져오기  (0) 2023.01.24
자바 JDBC  (0) 2023.01.24
JAVA JSONObject  (0) 2023.01.23

댓글