JAVA-Thread
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