본문 바로가기

아옳옳의 코딩공부/아옳옳 자바코딩공부

2021-04-29자바공부(스레드 Thead)

반응형

스레드를 간단하게 설명하면 멀티태스킹으로 하나의 응용프로그램이 여러 개의 작업을 동시에 처리하는것이다.

 

비유를 들자면 노래 들으면서 공부하기 , 노래부르며 춤추기 , 물건의 불류와 포장을 함께 하는 기계 등이다 

 

스레드를 알기전에 알아야 할 용어들이 있다. 

 

 

추가 부연 설명을 하자면 프로세스는 실행중인 프로그램을 의미한다 

그 프로세스내에 별도의 실행의 흐름을 갖는 것이 스레드 이다. 그리고 그 속에는 둘이상의 스레드도 가능하다 

아래 그림을 보자 

스레드 클래스로 스레드 만들기  

첫번째로 스레드 클래스를 만들어 줘야하는데 클래스 이름은 상관이 없지만 꼭 Thread 를 상속받아야 한다 

상속을 받고나면 빨간줄이 뜨고 오버라이딩 메소드를 해야하는데 오버라이딩 메소드를 하고나면 run 메소드가 나올것이다. ( 이 메소드속에 원하는 작업을 작성해줌 ) 

그리고 스레드 객체 생성후에 start라고 메소드 호출을 해주면 스레드가 실행이 된다 . 

 

근데 여기서 한가지 이상한 부분이 있을것이다. 보통 메소드를 호출하면 메소드 이름을 호출해야 하는데 여기는 run이 아닌 start를 해주었다. 물론 run이라고 해도 작동은 된다. 하지만 두개의 차이점이 분명히 있다. 

 

이 그림을 보자 보면 우리는 쓰레드를 통해서 다른 실행의 흐름을 갖고 싶었던 것이었으나 Run메소드를 호출하면서 별도의 스레드가 생겨난게 아닌 그냥 메소드 호출만 된것을 볼수 있다. 

 

코드를 보며 한번더 이해를 해보자 

package sdsad;

class TimerThread extends Thread {
	int n = 0;

	@Override
	public void run() {
		while (true) {
			System.out.println("세컨쓰레드" + n);
			n++;
			
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
public class ASdsdsdsd extends Thread {

	public static void main(String[] args) {
		TimerThread th = new TimerThread();
		th.start();
		int a = 0 ; 
		while (true) {
		System.out.println("메인" + a);
		a++;
		
		try {
			sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		}
	}
}

일단을 메인과 세컨드 스레드가 어떻게 돌아가는지를 알기위해 두 곳전부다 무한 루프를 만들어 주었고 1초 마다 찍어주었다. 그랫을떄 결과 이다. 

 결과  

보이는 것처럼 start했을땐 메인과 만들어 준 스레드가 각각의 실행의 흐름을 가지고 있지만 run으로 해주게 되면

run 메소드 안쪽 코드만 작동하면서 일반적인 메소드 호출했을때 결과가 나온다 . 이러한 차이가 있으니 잘 알아 두어야 한다 .

 

스레드 주의사항 

1. 스레드는 run속의 내용을 모두 하고 나면 자동소멸이 된다. 그래서 만약 run속에 아무것도 작성을 안하고 실행을 했을때엔 만들어지자 마자 소멸이 되버린다.  

계속 살아 있게 하려면 run메소드내에 무한 루프를 구성해야 한다 

2. 한번 종료한 스레드는 다시 시작시킬수 없다. 

3. 한 스레드에서 다른 스레드를 강제 종료할 수 있다. ( 나중에 다룸 ) 

 

 인터 페이스로 스레드 만들기 

클래스와 거의 비슷하다 Runnable임플리먼트를 해주고 run 메소드 구현 해주고 객체생성해주면 된다 .

 

 

반응형