"안녕하세요, 아미고! Ellie가 스레드에 대해 말했고 스레드를 사용하는 방법을 알려드리겠습니다. 새 스레드를 만들려면 다음을 수행해야 합니다."
1) 스레드 객체 생성
2) 실행하려는 메소드를 전달하십시오.
3) 생성된 Thread 객체에서 start 메소드를 호출합니다.
다음 예를 고려하십시오.
암호 | 설명 |
---|---|
|
Runnable 인터페이스를 구현하는 클래스입니다 . |
|
1 run 메서드를 구현하는 Printer 클래스의 인스턴스를 만듭니다. 2 새 스레드 객체를 생성합니다. run() 메서드를 호출해야 하는 프린터 개체를 생성자에 전달합니다. 3 start() 메서드를 호출하여 새 스레드를 시작합니다 . |
소규모 Java 프로그램은 일반적으로 «주 스레드»라는 하나의 스레드로 구성됩니다. 그러나 프로그램은 종종 "자식 스레드"라고 하는 추가 스레드를 시작합니다. 메인 스레드는 메인 메서드를 실행하고 종료합니다. Runnable 의 run 메소드는 하위 스레드 에 대한 유사한 메소드입니다.
"아, 쓰레드가 많다는 건 메인 메소드가 많다는 뜻이야."

Thread 개체에 어떤 특정 메서드를 시작해야 하는지 알려주려면 어떻게든 메서드를 개체에 전달해야 합니다. Java에서는 Runnable 인터페이스를 사용하여 이 작업을 수행합니다. 이 인터페이스에는 단일 추상 메서드인 void run() 이 포함되어 있습니다 . Thread 클래스에는 Thread(Runnable Runnable) 생성자가 있습니다. Runnable 인터페이스 를 구현하는 모든 개체를 전달할 수 있습니다 .
클래스는 Runnable을 상속 하고 해당 run 메서드를 재정의해야 합니다. 이 메서드를 호출하면 새 스레드가 시작됩니다. run 메서드 에 원하는 대로 작성할 수 있습니다 .
암호 | 설명 |
---|---|
|
Runnable 인터페이스를 구현하는 클래스입니다. |
|
각각 고유한 Printer 개체를 기반으로 하는 두 개의 스레드를 만듭니다. |
|
단일 프린터 개체를 기반으로 세 개의 스레드를 만듭니다. |
또한 이 모든 것을 하나의 클래스로 결합할 수 있습니다. Thread 클래스는 Runnable 인터페이스를 상속하므로 해당 run 메서드 만 재정의 하면 됩니다 .
새 스레드를 만드는 또 다른 방법 | |
---|---|
|
Runnable 인터페이스를 구현하는 Thread 클래스를 상속한 다음 run 메서드를 재정의합니다. |
|
각각 고유한 Printer 개체를 기반으로 하는 두 개의 스레드를 만듭니다. |
"이것은 보다 우아한 솔루션입니다."
"예, 하지만 다음과 같은 단점이 있습니다."
1) Natasha의 예에서와 같이 단일 개체를 기반으로 여러 스레드를 시작해야 할 수 있습니다.
2) Thread 클래스에서 상속받은 경우 클래스에 다른 부모 클래스를 추가할 수 없습니다.
3) 클래스에 상위 클래스가 있는 경우 스레드를 두 번째 상위 클래스로 추가할 수 없습니다.
"즉, 시작 메서드가 호출된 후 각 스레드는 생성자에게 전달된 개체의 실행 메서드 실행을 시작합니까?"
"예. 생성자에 아무 것도 전달되지 않으면 Thread는 내부 실행 메서드를 실행합니다."
"하지만 우리는 왜 이렇게 메소드를 호출하지 않습니까?"
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
printer1.run();
}
"메인 스레드가 run 메서드 에 도달하면 "작은 로봇" 이 내부로 들어가 내부의 모든 명령을 실행합니다. 실행된 후에야 메인 메서드로 돌아가서 추가 명령 실행을 계속합니다. 따라서 두 번째는 없습니다. " 작은 로봇"이 만들어질 것입니다. 모든 작업이 병렬(동시에)이 아닌 순차적으로 수행될 것입니다."
"알겠습니다. 실행 이외의 다른 메서드를 호출할 수 있습니까?"
"아니요. 모두 Runnable 인터페이스에 연결되어 있습니다. 이 인터페이스는 run() 메서드 중 하나에 대해서만 "알고 있습니다 ."
GO TO FULL VERSION