아무튼 개발
article thumbnail
반응형
  • Thread

스레드는 프로세스 내부에서 실행되는 명령의 모임으로

단일스레드와 다중스레드로 나뉜다.

 

  • 단일스레드

main 메소드만 사용하여 프로그램 작성(물론 메인 메소드에서 다른 메소드 호출하는 것은 상관없음)

메인 메소드 종료 시 프로그램도 함께 종료된다.

 

  • 다중스레드

main 메소드 + 다른 메소드에서도 함께 명령이 실행된다.

모든 스레드가 종료되어야 프로그램도 종료된다.

다중스레드를 작성하기 위해선 Thread 클래스를 사용하는 것과 Runnable 인터페이스를 사용하는 2가지 방법이 있다.

두 방법 모두 run() 메소드를 오버라이딩해야 하는 공통점이 있다.

 


  • Thread 클래스 사용한 스레드 작성

extends를 통해 Thread클래스와 상속관계를 맺어 스레드 기능을 갖추게 된다.

변수를 선언해주고 나서

Thread 클래스의 메소드인 run을 오버라이딩 한다.

run 메소드는 메인메소드와 함께 실행될 수 있다.

 

try~catch문 내의 sleep메소드는 1000일 경우 1초이며, 100은 0.1초이다. 따라서 0.1초를 쉬라는 의미이다. 이후 나올 메인 메소드와 번갈아 가며 실행하게 된다.

 

메인 메소드이다. 객체 생성은 위의 MyThread1 클래스로 만들어준다.

스레드는 총 3개로, 메인 메소드와 객체 생성한 t1, t2이다.

 

예시의 경우, int변수와 String변수로 만들었기에 괄호속에 내용이 나왔다.

start메소드가 실행되면 run()메소드도 함께 실행되게 된다.

 


  • 인터페이스를 사용한 스레드 작성

변수와 그 내용은 위에와 똑같으며 다만 클래스 활용한 위의 코딩과 지금 인터페이스를 사용했을 때 발생하는 차이점에 집중해서 확인할 것이다.

 

extends를 입력해 상속관계를 만든 위 코딩과 달리, implements를 통해 Runnable인터페이스를 구현한다.

그 다음 변수를 선언하여 초기화해주며

여기서 차이점은 sleep 부분이다.

상속관계에선 부모의 메소드도 그대로 받기 때문에 메소드명만 입력해도 문제가 없지만

인터페이스는 sleep메소드 앞에 Thread를 붙여줘야 한다.

 

또한 while문 내의 name을 살펴보면, 인터페이스는 getName메소드가 없기 때문에 name로 입력하였다.

 

그 외에 내용은 동일하다.

 

객체 생성 부분에서

Runnable 인터페이스는 객체를 생성할 수 없기 때문에 MyThread2 클래스를 입력한다.

Thread 입력 시 Runnable이 표시된 것으로 선택해주면 된다.

괄호 안에는 변수에 넣을 값을 입력해준다.

 


이렇게 다중메소드를 작성할 수 있는 2가지 방법의 기본적인 내용을 살펴보았다.

 

  • 우선순위

우선순위의 종류로는

Thread.MIN_PRIORITY : 최소 = 1

Thread.NORM_PRIORITY : 기본 = 5

Thread.MAX_PRIORITY : 최대 = 10

 

기본스레드의 우선순위는

객체명.getPriority() = 5

 

우선순위 변경을 할 경우에는

객체명.setPriority(원하는변경값);

을 해주면된다. 값을 변경해주므로 위처럼 get이 아닌 set으로 입력해줘야 한다!

원하는 변경 값은 숫자로 넣어도되며

Thread.MIN_PRIORITY와 같이 우선순위의 종류를 입력하면 그에 맞게 변경된다.

 

  • 데몬스레드

다른스레드에 도움을 주는 스레드로서, 다른스레드가 종료되면 데몬스레드가 끝나지 않았더라도 프로세스가 종료된다.

 t1.setDaemon(true);

 

 

반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...