Thread
Thread란 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위이다. 지금까지 실행하였던 Main 문도 하나의 Thread라고 생각할 수 있다.
Thread를 사용함으로써 장점은 Thread를 여러개 선언하여 실행하게 되면 동시 처리 효과를 보일 수 있다는 것이다. 자바에서는 Thread Class를 상속하여 사용할 수 있고, Run Method를 Override하여 어떻게 작동할 지 정할 수 있다.
이런 동시처리 효과로 인하여 각 Thread는 돌아가면서 CPU점유를 하게 된다. 즉 동시처리라는 것은 한번에 여러개를 Run 할 수 있다는 것이 아니라 하나의 작업이 끝나기 전에 다른 작업으로 넘어간다는 것을 의미한다. 이러한 Cpu 점유를 위한 우선순위를 주어서 CPU 점유 시간을 다르게 할 수 있다. Thread의 상태는 Ready, Runnable, Running, Dead의 4가지 상태가 있다. 밑의 그림은 Thread의 상태를 잘 나타내고 있다.
참조: 파우스트 블로그
Runnable - 준비상태: CPU를 점유하지 않고 있다. CPU를 점유하기 위하여 대기 상태라고 할 수 있다.
Running - 실행상태: Cpu를 점유하고 있는 상태이다. => Run Method를 실행하게 되는 단계 이다.
Dead - 종료상태: Thread가 종료된 상태이다.
추가 사항
Join: Thread가 종료 된 후 다음작업을 실행 할 수 있게 한다.
wait: Thread를 Blocked 상태로 만들 수 있다.
notift: Blocked된 Thread를 Runnable 상태로 만들 수 있다.
import java.util.ArrayList ;
/*
Thread.java
쓰레드: 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위이다.
지금까지 실행하였던 Main 문도 하나의 Thread 라고 생각 할 수 있다.
Thread를 여러개 선언하여 실행하게 하면 동시처리 효과를 보일 수 있다.
=> 우선순위(1~10까지 존재)에 따라 CPU점유시간이 다르게 된다.
쓰레드의 상태: Ready, Runnable, Running, Dead
Thread를 상속받아 실행 할 수 있으며 Thread에 정의 되어있는 run Method를
Override하여 어떻게 실행할 것인지 정의할 수 있다.
*/
public class thread extends Thread {
int number ;
//Constructor 선언
public thread ( int number ){
this . number = number ;
}
//Thread 의 Method를 Override하였다.
@Override
public void run () {
//Thread생성을 알리기 위한 Code
System . out . println ( this . number + " Thread start." );
//try-catch로 인한 Exception Handling
try {
//Thread를 3초동안 대기시킨다는 의미이다.
Thread . sleep ( 3000 );
} catch ( Exception e ) {
System . out . println ( "Error" + e );
}
//Thread종료을 알리기 위한 Code
System . out . println ( this . number + " Thread end." );
}
public static void main ( String [] args ) {
//ArrayList는 Generics에 Object를 담을 수 있다. => Thread도 가능
ArrayList < Thread > threads = new ArrayList < Thread >();
//10개의 Thread생성
for ( int i = 0 ; i < 10 ; i ++) {
Thread t = new Thread ( new thread ( i ));
//Thread 실행 -> Run Method를 실행하게 된다.
t . start ();
threads . add ( t );
}
for ( int i = 0 ; i < threads . size (); i ++) {
//ArrayList이므로 get으로서 ArrayList안의 thread 접근
Thread t = threads . get ( i );
try {
/*
Thread를 사용하여 동시에 처리하게 할 수 있다.
Join을 사용하여 Thread가 종료 된 후 다음 작업을 실행하게 할 수 있다.
*/
t . join ();
} catch ( Exception e ) {
System . out . println ( "Error2" + e );
}
}
//Main Thread종료를 알아보기 위한 Code
System . out . println ( "Main Thread End." );
}
}
원본코드: 원본크드
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.
Leave a comment