본문 바로가기

# 02/Java

[윤성우 열혈자바] 34-1. 쓰레드의 이해와 쓰레드의 생성

반응형

실행중인 프로그램 - 프로세스

프로세스의 단위 - 쓰레드

메인 메소드는 자동으로 실행되는 메인 쓰레드






쓰레드의 이해와 쓰레드의 생성 방법


쓰레드

  프로그램 내에서 실행의 흐름을 이루는 최소의 단위

  main 메소드의 실행도 하나의 쓰레드에 의해 진행이 된다.



class CurrentThreadName {

   public static void main(String[] args) {

      Thread ct = Thread.currentThread();            // 현재 진행중인 쓰레드 정보가 담김

      String name = ct.getName();    // 쓰레드의 이름을 반환

      System.out.println(name);

   }

}


main








쓰레드를 생성하는 방법


public static void main(String[] args) {

   Runnable task = () -> { // 쓰레드가 실행하게  내용

      int n1 = 10;

      int n2 = 20;

      String name = Thread.currentThread().getName();

      System.out.println(name + ": " + (n1 + n2));

   };

   

   Thread t = new Thread(task);

   t.start(); // 쓰레드 생성  실행

   System.out.println("End " + Thread.currentThread().getName());

}    


// Runnable         void run()



모든 쓰레드가 일을 마쳐야 프로그램 종료

- 메인쓰레드가 먼저 끝날지 새로생성된 쓰레드가 먼저 끝날지는 알 수 없다!


• 1단계  Runnable 구현한 인스턴스 생성

• 2단계  Thread 인스턴스 생성

• 3단계  start 메소드 호출








 이상의 쓰레드를 생성한 


public static void main(String[] args) {

   Runnable task1 = () -> {                 // 20 미만 짝수 출력

      try {

         for(int i = 0; i < 20; i++) {

            if(i % 2 == 0)

               System.out.print(i + " ");

            Thread.sleep(100);                 // 0.1초간 잠을 잔다.

         }

      }catch(InterruptedException e) {

         e.printStackTrace();

      }

   };

   Runnable task2 = () -> {             // 20 미만 홀수 출력

      try {

         for(int i = 0; i < 20; i++) {

            if(i % 2 == 1)

               System.out.print(i + " ");

            Thread.sleep(100);             // 0.1초간 잠을 잔다.

         }

      }catch(InterruptedException e) {

         e.printStackTrace();

      }

   };

   

   Thread t1 = new Thread(task1);

   Thread t2 = new Thread(task2);

   t1.start();

   t2.start();

}



항상 순서대로 출력되진 않는다!








쓰레드를 생성하는  번째 방법 - 람다식 기반인 첫 번째 방법을 더 많이 쓰긴함...


class Task extends Thread {

   public void run() { // Thread run 메소드 오버라이딩

      int n1 = 10;

      int n2 = 20;

      String name = Thread.currentThread().getName();

      System.out.println(name + ": " + (n1 + n2));

   }

}

 

class MakeThreadDemo2 {

   public static void main(String[] args) {

      Task t1 = new Task();

      Task t2 = new Task();

      t1.start();

      t2.start();

      System.out.println("End " + Thread.currentThread().getName());

   }

}


• 1단계  Thread 상속하는 클래스의 정의와 인스턴스 생성

• 2단계  start 메소드 호출




반응형