이 글에서는 주로 자바에서 쓰레드를 생성하는 두 가지 방법과 관련 예시를 소개하고 있습니다. 도움이 필요한 친구들은
자바에서 쓰레드를 생성하는 두 가지 방법
Java는 다중 스레드 프로그램을 생성하기 위한 스레드 클래스 Thread를 제공합니다. 실제로 스레드를 생성하는 작업은 일반 클래스 객체를 생성하는 것과 동일하며 스레드는 Thread 클래스 또는 그 하위 클래스의 인스턴스 객체입니다. 각 Thread 개체는 별도의 스레드를 설명합니다. 스레드를 생성하려면 두 가지 메소드가 있습니다. ◆ Java.lang.Thread 클래스에서 새 스레드 클래스를 파생시키고 해당 run() 메소드를 오버로드해야 합니다.인터페이스를 구현하고 Runnalbe 인터페이스에 run() 메서드를 오버로드합니다.
Java가 스레드를 생성하는 두 가지 방법을 제공하는 이유는 무엇입니까? 그들 사이의 차이점은 무엇입니까? 이에 비해 어떤 방법이 더 나은가요?
Java에서 클래스는 단일 상속만 지원합니다. 즉, 새 클래스를 정의할 때 하나의 외부 클래스만 확장할 수 있습니다. 이런 식으로 사용자 정의 스레드 클래스를 생성하면 다음과 같이 구현됩니다. Thread 클래스의 메서드를 확장하므로 이 사용자 정의 클래스는 다른 클래스를 확장할 수 없으며 더 복잡한 기능을 구현할 수 없습니다. 따라서 사용자 정의 클래스가 다른 클래스를 확장해야 하는 경우 Runnable 인터페이스를 구현하는 메소드를 사용하여 해당 클래스를 스레드 클래스로 정의하면 Java 단일 상속의 제한을 피할 수 있습니다. 가장 중요한 것은 Runnable 인터페이스를 구현하여 생성된 스레드가 동일한 리소스를 처리할 수 있어 리소스 공유가 가능하다는 점입니다.(1) Thread 클래스를 확장하여 다중 생성합니다. 스레드
극장에 어린이, 성인, 노인에게 티켓을 판매하는 데 사용되는 세 개의 티켓 판매점이 있다고 가정해 보겠습니다. 극장에는 각 창구마다 어린이 티켓, 성인 티켓, 노인 티켓 등 100장의 영화 티켓이 있습니다. 세 개의 창구가 동시에 티켓을 판매해야 하는데, 이제 티켓 판매자는 한 명뿐입니다. 이 티켓 판매자는 CPU에 해당하고 창구 3개는 스레드 3개에 해당합니다. 이 세 가지 스레드가 프로그램을 통해 어떻게 생성되는지 살펴보겠습니다.public class MutliThreadDemo { public static void main(String [] args){ MutliThread m1=new MutliThread("Window 1"); MutliThread m2=new MutliThread("Window 2"); MutliThread m3=new MutliThread("Window 3"); m1.start(); m2.start(); m3.start(); } } class MutliThread extends Thread{ private int ticket=100;//每个线程都拥有100张票 MutliThread(String name){ super(name);//调用父类带参数的构造方法 } public void run(){ while(ticket>0){ System.out.println(ticket--+" is saled by "+Thread.currentThread().getName()); } } }
Thread 클래스를 확장하여 생성된 여러 스레드는 동일한 코드를 실행하지만 서로 독립적이며, 서로 간섭하지 않고 각자의 리소스를 갖고 있음을 알 수 있습니다.
(2) Runnable 인터페이스를 구현하여 멀티 스레드를 생성합니다.
public class MutliThreadDemo2 { public static void main(String [] args){ MutliThread m1=new MutliThread("Window 1"); MutliThread m2=new MutliThread("Window 2"); MutliThread m3=new MutliThread("Window 3"); Thread t1=new Thread(m1); Thread t2=new Thread(m2); Thread t3=new Thread(m3); t1.start(); t2.start(); t3.start(); } } class MutliThread implements Runnable{ private int ticket=100;//每个线程都拥有100张票 private String name; MutliThread(String name){ this.name=name; } public void run(){ while(ticket>0){ System.out.println(ticket--+" is saled by "+name); } } }
(3) Runnable 인터페이스를 구현하여 스레드 간 리소스 공유를 실현합니다.
이러한 상황은 기차역의 티켓팅 시스템을 시뮬레이션하는 것과 같이 현실에도 존재합니다. 그날 A 지점에서 B 지점으로 전송된 기차표는 100장뿐이고 모든 창구는 이 100장의 티켓을 판매할 수 있습니다. 그러면 각 창구도 하나의 스레드와 동일하지만 이전 예와 다른 점은 모든 스레드를 처리한다는 것입니다. 리소스는 동일한 리소스, 즉 티켓 100개입니다. 스레드를 생성하기 위해 이전 방법을 계속 사용한다면 이 상황을 어떻게 처리할 수 있을까요? 아래 프로그램을 보면public class MutliThreadDemo3 { public static void main(String [] args){ MutliThread m=new MutliThread(); Thread t1=new Thread(m,"Window 1"); Thread t2=new Thread(m,"Window 2"); Thread t3=new Thread(m,"Window 3"); t1.start(); t2.start(); t3.start(); } } class MutliThread implements Runnable{ private int ticket=100;//每个线程都拥有100张票 public void run(){ while(ticket>0){ System.out.println(ticket--+" is saled by "+Thread.currentThread().getName()); } } }
실제 문제에서 동일한 작업을 수행하기 위해 여러 스레드를 생성해야 하고 여러 스레드가 동일한 리소스를 공유하는 경우 Runnable 인터페이스를 구현하여 다중 스레드 프로그램을 만들 수 있음을 알 수 있습니다. . 이 기능은 Thread 클래스를 확장함으로써 달성될 수 없습니다. 독자들은 왜 그렇게 생각할까요?
Runnable 인터페이스를 구현하면 Thread 클래스를 확장하는 것보다 비교할 수 없는 이점이 있습니다. 이 방법은 코드를 여러 스레드에서 공유할 수 있어 프로그램의 견고성에 도움이 될 뿐만 아니라 코드와 데이터 리소스가 상대적으로 독립적이므로 동일한 코드를 사용하는 여러 스레드가 동일한 작업을 처리하는 상황에 특히 적합합니다. 의지. 이러한 방식으로 스레드, 코드 및 데이터 리소스가 효과적으로 분리되며 이는 객체 지향 프로그래밍 아이디어를 잘 반영합니다. 따라서 거의 모든 멀티스레드 프로그램은 Runnable 인터페이스를 구현함으로써 완성됩니다.
위 내용은 Java에서 스레드를 생성하기 위한 두 가지 방법의 예제 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!