JAVA-Thread

2 minute read

Thread

Thread란 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위이다. 지금까지 실행하였던 Main 문도 하나의 Thread라고 생각할 수 있다.

Thread를 사용함으로써 장점은 Thread를 여러개 선언하여 실행하게 되면 동시 처리 효과를 보일 수 있다는 것이다. 자바에서는 Thread Class를 상속하여 사용할 수 있고, Run Method를 Override하여 어떻게 작동할 지 정할 수 있다.

이런 동시처리 효과로 인하여 각 Thread는 돌아가면서 CPU점유를 하게 된다. 즉 동시처리라는 것은 한번에 여러개를 Run 할 수 있다는 것이 아니라 하나의 작업이 끝나기 전에 다른 작업으로 넘어간다는 것을 의미한다. 이러한 Cpu 점유를 위한 우선순위를 주어서 CPU 점유 시간을 다르게 할 수 있다. Thread의 상태는 Ready, Runnable, Running, Dead의 4가지 상태가 있다. 밑의 그림은 Thread의 상태를 잘 나타내고 있다.

참조: 파우스트 블로그

  1. Runnable - 준비상태: CPU를 점유하지 않고 있다. CPU를 점유하기 위하여 대기 상태라고 할 수 있다.
  2. Running - 실행상태: Cpu를 점유하고 있는 상태이다. => Run Method를 실행하게 되는 단계 이다.
  3. Dead - 종료상태: Thread가 종료된 상태이다.
  4. 추가 사항
    • 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을 남겨주세요.

Categories:

Updated:

Leave a comment