javaboiii의 JAVA/JAVA 기초

JAVA - 스레드(Thread)

javaboiii 2024. 7. 23. 22:54

JAVA

스레드(Thread)

프로그램에서 스레드는 실질적으로 일을 수행하는 주체

 

스레드는 프로세스 내에서 실행되는 하나의 흐름

스레드가 여러 개 있으면 동시에 여러 작업을 수행 할 수 있음

각 스레드는 독립적으로 실행되지만, 같은 프로세스 내에서 자원을 공유할 수 있음

 

프로세스(process)

프로세스는 실행 중인 프로그램을 의미함

각 프로세스는 독립된 메모리 공간을 가지고 있음

하나의 프로세스 내에서 여러 스레드가 실행될 수 있음

 


자바에서 스레드는 다양한 역할을 수행하며,

병렬 처리와 동시 실행을 가능하게 함

 

병렬처리

스레드는 병렬 처리를 통해 여러 작업을 동시에 수행할 수 있게 함

웹 서버에서 여러 클라이언트의 요청을 동시에 처리할 때 각각의 요청을 별도의

스레드에서 처리함으로써 서버의 응답 속도를 향상시킬 수 있음

 

동시성

동시성은 여러 작업이 동시에 실행되는 것처럼 보이도록 하는 것임

스레드를 사용하면 여러 작업이 동시에 진행되는 것처럼 보이게 할 수 있음

실제로는 CPU의 스케줄링에 의해 교차 실행되는 것임

 

비동기 처리

스레드를 사용해 비동기 작업을 처리할 수 있음

비동기 처리란 메인 스레드가 다른 작업을 수행하는 동안 시간이 오래 걸리는 작업을

별도의 스레드에서 처리하는 것임

 

백그라운드 작업

스레드는 백그라운드에서 지속적으로 실행되는 작업을 처리할 때 유용함

예를 들어 사용자 인터페이스와 관련된 작업을 메인 스레드에서 처리하는 동시에

데이터베이스 백업, 로그 기록 등의 작업을 별도의 스레드에서 처리할 수 있음

 

package thread;
// [스레드]

class Thread01 extends Thread{

	@Override
	public void run() {
		for (int i = 0; i <= 10; i++) {
			System.out.println(i+" 첫번째 스레드 일하는 중.....");
		}
	}
}
// 인터페이스는 == 추상메서드만 가질수 있어서
// 추상클래스가 덜 강제적일 수 있음
// 인터페이스를 "강제"할때 쓰는 이유 == 추상 메서드의 오버라이딩 "강제" 
class Thread02 implements Runnable{

	@Override
	public void run() {
		for (int i = 0; i <= 10; i++) {
			System.out.println(i+" 두번째 스레드 일하는 중.....");
		}
	}
}

public class Test01 {
	public static void main(String[] args) {
		Thread01 t1=new Thread01();
		Thread t2 =new Thread(new Thread02());
		
		t1.start();
		t2.start();
	}
}