"안녕하세요, 아미고! Ellie가 스레드에 대해 말했고 스레드를 사용하는 방법을 알려드리겠습니다. 새 스레드를 만들려면 다음을 수행해야 합니다."

1)  스레드 객체 생성

2) 실행하려는 메소드를 전달하십시오.

3)  생성된 Thread 객체에서 start 메소드를 호출합니다.

다음 예를 고려하십시오.

암호 설명
class Printer implements Runnable
{
public void run()
{
System.out.println("I’m printer");
}
}
Runnable 인터페이스를 구현하는 클래스입니다 .
public static void main(String[] args)
{
Printer printer = new Printer();
Thread childThread = new Thread(printer);
childThread.start();
}
1 run 메서드를 구현하는 Printer 클래스의 인스턴스를 만듭니다.
2 새 스레드 객체를 생성합니다. run() 메서드를 호출해야 하는 프린터 개체를 생성자에 전달합니다. 3 start()
메서드를 호출하여 새 스레드를 시작합니다 .

소규모 Java 프로그램은 일반적으로 «주 스레드»라는 하나의 스레드로 구성됩니다. 그러나 프로그램은 종종 "자식 스레드"라고 하는 추가 스레드를 시작합니다. 메인 스레드는 메인 메서드를 실행하고 종료합니다. Runnable 의 run 메소드는 하위 스레드 에 대한 유사한 메소드입니다.

"아, 쓰레드가 많다는 건 메인 메소드가 많다는 뜻이야."

새 스레드 생성 및 시작 - 1

Thread 개체에 어떤 특정 메서드를 시작해야 하는지 알려주려면 어떻게든 메서드를 개체에 전달해야 합니다. Java에서는 Runnable 인터페이스를 사용하여 이 작업을 수행합니다. 이 인터페이스에는 단일 추상 메서드인 void run() 이 포함되어 있습니다 . Thread 클래스에는 Thread(Runnable Runnable) 생성자가 있습니다. Runnable 인터페이스 를 구현하는 모든 개체를 전달할 수 있습니다 .

클래스는 Runnable을 상속 하고 해당 run 메서드를 재정의해야 합니다. 이 메서드를 호출하면 새 스레드가 시작됩니다. run 메서드 에 원하는 대로 작성할 수 있습니다 .

암호 설명
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Runnable 인터페이스를 구현하는 클래스입니다.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

Printer printer2 = new Printer("Jack");
Thread thread2 = new Thread(printer2);
thread2.start();
}
각각 고유한 Printer 개체를 기반으로 하는 두 개의 스레드를 만듭니다.
public static void main(String[] args)
{
Printer printer = new Printer("Natasha");

Thread thread1 = new Thread(printer);
thread1.start();

Thread thread2 = new Thread(printer);
thread2.start();

Thread thread3 = new Thread(printer);
thread3.start();
}
단일 프린터 개체를 기반으로 세 개의 스레드를 만듭니다.

또한 이 모든 것을 하나의 클래스로 결합할 수 있습니다. Thread 클래스는 Runnable 인터페이스를 상속하므로 해당 run 메서드 만 재정의 하면 됩니다 .

새 스레드를 만드는 또 다른 방법
class Printer extends Thread
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Runnable 인터페이스를 구현하는 Thread 클래스를 상속한 다음 run 메서드를 재정의합니다.
public static void main(String[] args)
{
Printer printer = new Printer("Jack");
printer.start();

Printer printer2 = new Printer("Jack");
printer2.start();

}
각각 고유한 Printer 개체를 기반으로 하는 두 개의 스레드를 만듭니다.

"이것은 보다 우아한 솔루션입니다."

"예, 하지만 다음과 같은 단점이 있습니다."

1)  Natasha의 예에서와 같이 단일 개체를 기반으로 여러 스레드를 시작해야 할 수 있습니다.

2)  Thread 클래스에서 상속받은 경우 클래스에 다른 부모 클래스를 추가할 수 없습니다.

3)  클래스에 상위 클래스가 있는 경우 스레드를 두 번째 상위 클래스로 추가할 수 없습니다.

"즉, 시작 메서드가 호출된 후 각 스레드는 생성자에게 전달된 개체의 실행 메서드 실행을 시작합니까?"

"예. 생성자에 아무 것도 전달되지 않으면 Thread는 내부 실행 메서드를 실행합니다."

"하지만 우리는 왜 이렇게 메소드를 호출하지 않습니까?"

암호
public static void main(String[] args)
{
 Printer printer1 = new Printer("Nick");
 printer1.run();
}

"메인 스레드가 run 메서드 에 도달하면 "작은 로봇" 이 내부로 들어가 내부의 모든 명령을 실행합니다. 실행된 후에야 메인 메서드로 돌아가서 추가 명령 실행을 계속합니다. 따라서 두 번째는 없습니다. " 작은 로봇"이 만들어질 것입니다. 모든 작업이 병렬(동시에)이 아닌 순차적으로 수행될 것입니다."

"알겠습니다. 실행 이외의 다른 메서드를 호출할 수 있습니까?"

"아니요. 모두 Runnable 인터페이스에 연결되어 있습니다. 이 인터페이스는 run() 메서드 중 하나에 대해서만 "알고 있습니다 ."