1.Runnable, Thread
쓰레드는 전에 설명했듯이 작업을 병렬적으로 수행할 때에 사용하는데
실제로는 두개가 나란히 작동되는게 아니고 라운드로빈이라는 스케줄링 기법을 사용한다.
라운드로빈을 사용하기에 매번 똑같은 결과를 얻을 수 없고 작업 순서가 매번 다르게 실행된다.
CPU의 계산을 최대한 효율적이고 모든 프로그램에 공평하게 할당하기 위해 만들어낸 여러가지 기법들 중 하나이다.
Java에서는 Runnable인터페이스나 Thread 클래스를 상속 받아 멀티 스레드를 구현할 수 있다.
Runnable의 경우는 run메소드 작업을 정의 한 후 Thread 생성 시 안에 집에 넣는다.
Runnable로 따로 정의하지 않고 Thread의 오버라이드 된 run에 바로 정의를 하여도 문제가 없어 보통은 Thread만 단독으로 자주 쓴다.
익명객체를 사용하여 객체 선언과 동시 메소드를 1회용으로 만들수 있다.
다음 예제를 확인해보자.
package chap10.exam01.runnable; public class Job implements Runnable { @Override public void run() { for(int i = 0; i < 5; i++) { System.out.println("워크 스레드 실행"); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
package chap10.exam01.runnable; public class MainThread { // Main Thread를 main에서 발생 시킨다. // 굉장히 중요 public static void main(String[] args) { // 함께 일해줄 WorkThread 생성(Runnable) // 1. work thread가 해야할 일 생성 Runnable job = new Job(); // 2. 일 해줄 스레드 생성 Thread thread = new Thread(job); // 3. 일을 시킨다. (무조건 start로 시작함) thread.start(); // 동시 실행 테스트 for(int i = 0; i < 5; i++) { System.out.println("메인 스레드 실행"); try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
익명객체를 이용한 스레드
package chap10.exam01.runnable; public class AnonyMain { public static void main(String[] args) { // 스레드 생성(할 일) 과 같이 생성 // 익명객체, 따로 java파일을 만들 필요가 없음 Thread thread = new Thread() { @Override public void run() { for(int i = 0; i < 5; i++) { System.out.println("워크 스레드 실행"); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; // 스레드 실행 thread.start(); // 메인에서 실행할 작업 for(int i = 0; i < 5; i++) { System.out.println("메인 스레드 실행"); try { Thread.sleep(400); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
'개념 및 코딩 > 08.Thread 스레드' 카테고리의 다른 글
[JAVA]08-07.Thread Pool, Pool Block (0) | 2018.09.06 |
---|---|
[JAVA]08-05.Demon Thread (0) | 2018.09.06 |
[JAVA]08-04.Thread State, Control (0) | 2018.09.06 |
[JAVA]08-03.Priority, Synchronized (0) | 2018.09.06 |
[JAVA]08-01.Thread (0) | 2018.09.04 |