코딩 이야기/Java

[JAVA] 쓰레드(Thread) : 생성

dajoonee(다쥬니) 2020. 12. 9. 06:41
728x90
반응형

* 이 글은 2020. 3. 27. 23:28에 작성되었던 글입니다 *

 

java에서는 작업쓰레드도 객체로 생성을 하기 때문에 클래스가 필요하다.

 

Thread 생성 및 실행

1. java.lang.Thread를 직접 생성하는 방법


Runnable을 매개값으로 갖는 생성자를 호출하여 사용.

Thread thread = new Thread ( Runnable target);

 

 

1)Runnable은 인터페이스 타입이므로 구현 객체를 대입 해야한다.

** Runnable은 작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체이다. **

2) 구현 객체 생성

 ① 새로운 클래스를 생성하여 구현 객체를 만들수도 있고,

 ② 익명 구현 객체를 정의할 수 도 있다.

3) 구현 클래스는 run() 메소드를 재정의 해야한다.

  run() 메소드 안에는 작업 스레드가 실행할 코드를 작성한다.

① 구현 클래스

class Task implements Runnable {
       @Override
       public void run() {
              실행할 코드;
       }
}

② 익명 구현 객체

Thread thread = new Thread(new Runnable(){
          @Override
          public void run() {
                  실행할 코드;
          }
 });

 

 

Thread를 상속하여 하위 클래스로 만들어 생성하기.


1) 1의 방법과 마찬가지로 run() 메소드를 재정의하여 쓰레드가 실행할 코드를 작성한다.

class Thread1 extends Thread { @Override public void run() { 실행할 코드; } }

class Thread1 extends Thread {
         @Override
         public void run() {
             실행할 코드;
         }
}

2. Thread 실행하기.


1) Thread의 start() 메소드를 호출하면 해당 thread가 실행된다.

class MainClass { public static void main (String [] args) { Thread thread = new Thread(new Runnable(){ @Override public void run() { System.out.println("작업 내용"); } }); thread.start(); } }

class MainClass {

    public static void main (String [] args) {
          Thread thread = new Thread(new Runnable(){
                       @Override
                       public void run() {
                              System.out.println("작업 내용");
                       }
          });
          
         thread.start();  
    }

}

 

Thread 이름 설정 및 스케줄링

 

 

Thread는 생성할 때 이름을 설정할 수 있다.

Thread의 생성자 내에서 setName() 메소드를 이용하여 설정이 가능하다.

class ThreadA extends Thread { class ThreadA() { setName("ThreadA"); } @Override public void run() { System.out.println(Thread.getName()); } }

class ThreadA extends Thread {
      class ThreadA() {
            setName("ThreadA");
      }

     @Override
     public void run() {
            System.out.println(Thread.getName());
     }
}

이름을 명시하지 않으면 자동으로 Thread1 ~ Threadn번까지의 이름으로 설정된다.

getName() 메소드를 이용하면 thread의 이름을 얻을 수 있다.

반응형