본문 바로가기

Back/Java

[JAVA/멀티스레드] JAVA멀티스레딩 - 스레드생성1부. 스레드의 기능과 디버깅

스레드 생성

자바에서는 JDK가 모든 스레드의 관련 속성과 메서드를 스레드 클래스로 압축한다.
그래서 새 스레드를 만들려면 스레드 객체를 생성해야한다.

package thread.creation.example;

public class Main {
	public static void main(String[] args) {
		Thread thread1 = new Thread(new Runnable() {
			@Override
			public void run() {
				//Code that will run in a new thread
			}
		});
		//lambda java8
		Thread thread2 = new Thread(()->{
        	//스레드명을 알 수 있는 static 메서드
			Thread.currentThread().getName();
		});
		
		//start()로 run()을 실행
		thread1.start();
	}
}

 
runnable 인터페이스로 다른 스레드에서 코드를 실행하는 방법
 

스레드 실행

- start() 메서드 사용해야 스레드 객체가 실행됨
- start() 메서드를 호출하면 run() 메서드가 실행된다.
- sleep 정적 메서드를 사용해서 스레드를 잠시 멈출수 있다. 반복되는것은 아니고, 운영체제에게 지시하는것.
“이 시간이 끝나기 전까지는 이 스레드를 스케쥴링 하지 마라”
다시말하면, 이 스레드는 sleep되는 시간동안 CPU를 사용하지 않는다.



스레드 이름 정하기

thread.setName("새스레드“)
스레드에 이름을 붙일수 있다.
디버깅할때 편하기 위해 의미있는 이름을 붙이는게 좋다.


스레드 우선순위 설정

setPriority(10)

안에 숫자는 1~10이 들어감

maxPriority, minPriority, normPriority

동적 우선순위의 정적요소를 계획적으로 설정할 수 있다



스레드 동작 디버깅 & 예외처리

- 새 스레드에 breack point를 걸고 계속 실행했을때
메인스레드는 이미 완료되고 JVM이 파괴될수 있다.

- thread.setUncauhtExceptionHandler
UncheckedException은 직접 캐치해서 특정방법으로 처리하지않으면 전체 스레드를 다운시킴
처음부터 전체스레드에 해당하는 예외핸들러를 지정할 수 있다

- 스레드 내에서 발생한 exception이 어디에서도 캐치되지않으면 handler가 호출될거다.