본문 바로가기

BackEnd/Java

[java] 스레드(Thread)

728x90
반응형

1. 스레드란?

   ▷ 메모리를 할당받은 프로세스에서 실질적인 작업을 수행하는 것입니다.

   ▷ 하나의 프로세스 안에서 두 가지 이상의 일을 하도록 도와줍니다.

 

프로그램을 실행시키면 메모리가 할당되어 실행됩니다.

이때, 실행 중인 프로그램은 프로세스!

프로세스에서 작업을 수행하는 것이 스레드이며 두 가지 이상의 작업을 하려면 두 개 이상의 스레드가 필요

 

 

◎ 프로세스가 실행되는 방식

1. 시간분할 방식
   ▷ 시간분할 방식은 모든 프로세스에게 동일한 시간을 할당하고 골고루 실행합니다.

2. 선점형 방식
   ▷ 선점형 방식은 각각의 프로세스에게 우선순위를 부여하고 우선순위가 높은 순으로 실행되는 방식입니다.
       우선순위가 높은 프로세스가 잠시 멈추면 그다음 순위의 프로세스가 동작합니다.

 

 

◎ 스레드 생성 방법

1. Thread 클래스를 상속받는 방법
2. Runnable 인터페이스를 구현하는 방법

→ Thread 클래스를 상속받아서 사용하는 것이 간단하지만 인터페이스를 사용 하면 다중상속이 가능하기 때문에 주로 Runnable을 사용합니다.

 

 

◎ 프로세스 실행되는 방식 예제

public class Thread1 {
	public static void main(String[] args) {
		MyThread th1 = new MyThread();
		Runnable th2 = new MyThread2();
		Thread t = new Thread(th2);
		th1.start();
		t.start();
		for(int i=0; i<10; i++) {
			System.out.println("메인 함수 진행 중" + i);
		}
	}
}

class MyThread extends Thread{
	public void run() {
		for(int i=0; i<10; i++) {
			System.out.println("스레드 진행 중" + i);
		}
	}
}

class MyThread2 implements Runnable{
	public void run() {
		for(int i=0; i<10; i++) {
			System.out.println("러너블 진행 중" + i);
		}
	}
}

//	출력 : 
//	메인 함수 진행 중0
//	메인 함수 진행 중1
//	메인 함수 진행 중2
//	메인 함수 진행 중3
//	.
//	.
//	.
//	러너블 진행 중5
//	러너블 진행 중6
//	러너블 진행 중7
//	러너블 진행 중8
//	러너블 진행 중9
//	스레드 진행 중9


출력은 우선순위에 따라 매번 바뀌기 때문에 여기서 나오는 순서는 중요하지 않습니다.

 

 

2. 스레드의 우선순위

public class Thread2 {
	public static void main(String[] args) {
		Runnable t = new MyThread3();
		Thread t1 = new Thread(t, "thread1");
		t1.setPriority(1);  // 우선순위 1로 지정
		System.out.println("t1의 우선순위는 : " + t1.getPriority());
		// getPriority()는 우선순위를 반환합니다.
		
		Thread t2 = new Thread(t, "thread2");
		// 아무 우선순위도 지정하지 않을 경우 우선순위5
		System.out.println("t2의 우선순위는 : " + t2.getPriority());
		
		Thread t3 = new Thread(t, "thread3");
		t3.setPriority(10);  // 우선순위 10으로 지정
		System.out.println("t3의 우선순위는 : " + t3.getPriority());
		t1.start();
		t2.start();
		t3.start();
	}
}

class MyThread3 implements Runnable{
	public void run() {
		for(int i=0; i<5; i++) {
			System.out.println("<" + Thread.currentThread().getName() + ">");
		}
		for(int i=0; i<1000; i++) { // 시간 지연		
		}
	}
}

//	출력 : 
//	t1의 우선순위는 : 1
//	t2의 우선순위는 : 5
//	t3의 우선순위는 : 10
//	<thread2>
//	<thread1>
//	<thread3>
//	.
//	.
//	.
//	<thread2>
//	<thread1>
//	<thread1>


특정 스레드의 우선순위의 숫자가 클수록 데이터를 한 번에 처리하는 수가 많아진다고 합니다.

 

컴퓨터를 잘 사용하시는 분들의 이야기를 한 번씩 보면 스레드가 되게 중요하다는 것을 알 수 있습니다.

 

스레드는 한꺼번에 여러개를 동시에 사용할 수 있는 것이라고 알고있습니다.

 

이번 글에서는 잠깐 맛보기만 한 후 설 끝나고 수업 후 정리해보도록 하겠습니다!!

 

즐거운 명절 보내세요~~~

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

 

728x90
반응형