13.1 프로세스와 쓰레드 (process & thread)

하나의 새로운 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다

대부분의 프로그램이 멀티 쓰레드로 작성! 항상 장점이 있는 것은 아닙니다

13-3 스레드의 구현과 실행

  1. Thread클래스를 상속

    class MyThread extends Thread{
    
    		public void run()
    
    }
    
  2. Runnable 인터페이스를 구현

    class MyThread2 extends Runnable{
    
    		public void run() //Runnable 인터페이스의 추사메서드 run() 을 구현
    
    }
    
package kr.or.test.thread;

/*

 */
public class Ex13_1 {
      public static void main(String[] args) {
            ThreadEx1_1 t1 = new ThreadEx1_1();

            Runnable r = new ThreadEx1_2();
            Thread t2 = new Thread(r);

            t1.start();
            t2.start();

      }

}

class ThreadEx1_1 extends Thread { // Thread 클래스를 상속해서 스레드 구현
      @Override
      public void run() {
            for (int i = 0; i < 200; i++) {
                  System.out.println(getName());
            } //조상인 Thread의 getName() 을 호출
      }
}
class ThreadEx1_2 implements Runnable { //Runnable 인터페이스를 구현해서 스레드 생성
      @Override
      public void run() {
            for (int i = 0; i < 200; i++) {
                  //Thread.currentThread() - 현재 실행중인 Thread를 반환합니다
                  System.out.println(Thread.currentThread().getName());
            }

      }
}

13-5 스레드의 실행 - start()

13-6 start() 와 run()

Untitled

13-7 main 쓰레드

13-11 스레드의 I/O 블락킹 (blocking)

package kr.or.test.thread;

import javax.swing.*;

/*

 */
public class ThreadEx6 {
      public static void main(String[] args) {
            ThreadEx7_1 th1 = new ThreadEx7_1();
            th1.start();

            String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
            System.out.println("입력하신 값은 " + input + " 입니다");

      }

}

class ThreadEx7_1 extends Thread {
      @Override
      public void run() {
            for (int i = 10; i > 0; i--) {
                  System.out.println("i = " + i);
                  try {
                        Thread.sleep(1000);
                  } catch (Exception e) {
                        System.out.println(e.getMessage());
                  }
            }
      }
}

13-14 쓰레드의 우선순위 (priority of thread)

13-16 스레드 그룹

13-18 데몬 스레드 (daemon thread)

13-20 스레드의 상태

상태 설명
NEW 스레드가 생성되고 아직 start()가 호출되지 않은 상태
RUNNABLE 실행 중 또는 실행 가능한 상태
BLOCKED 동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태)
WAITING, TIMED_WAITING 스레드의 작업이 종료되지는 않았지만, 실행가능하지 않은 (unrunnable) 일시정지의 상태. TIMED_WAITING은 일시정지시간이 지정된 경우를 의미
TERMINATED 스레드의 작업이 종료된 상태

Untitled

13-21 스레드의 실행제어

13-22 sleep()