Java Java베이스 Java에서 스레드를 생성하는 세 가지 방법은 무엇입니까?

Java에서 스레드를 생성하는 세 가지 방법은 무엇입니까?

Nov 23, 2020 pm 04:51 PM
java 스레드 생성

Java에서 스레드를 생성하는 세 가지 방법은 다음과 같습니다. 1. Thread 클래스를 상속하여 스레드를 생성합니다. 2. Runnable 인터페이스를 구현하여 스레드를 생성합니다. 3. Callable 및 Future를 사용하여 스레드를 생성합니다.

Java에서 스레드를 생성하는 세 가지 방법은 무엇입니까?

Java는 Thread 클래스를 사용하여 스레드를 나타내며 모든 스레드 개체는 Thread 클래스 또는 해당 하위 클래스의 인스턴스여야 합니다. Java는 다음과 같은 세 가지 방법으로 스레드를 생성할 수 있습니다.

1) Thread 클래스를 상속하여 스레드를 생성합니다.

2) Runnable 인터페이스를 구현하여 스레드를 생성합니다.

3) Callable 및 Future를 사용하여 스레드 생성

스레드를 생성하는 세 가지 방법을 각각 살펴보겠습니다.

------------스레드 생성을 위해 Thread 클래스 상속------------ --- -----

Thread 클래스를 상속하여 멀티 스레드를 생성하고 시작하는 일반적인 단계는 다음과 같습니다

1】D Thread 클래스의 하위 클래스를 정의하고 run을 재정의합니다. () 클래스의 메소드 중 이 메소드의 메소드 본문은 스레드가 완료해야 하는 작업이며 run() 메소드를 스레드 실행 본문이라고도 합니다.

2】Thread 하위 클래스의 인스턴스 생성, 즉 스레드 개체 생성

3】스레드 시작, 즉 스레드의 start() 메서드 호출

코드 예제

public class MyThread extends Thread{//继承Thread类
  public void run(){
  //重写run方法
  }
}
public class Main {
  public static void main(String[] args){
    new MyThread().start();//创建并启动线程
  }
}

-- --------스레드 생성을 위한 Runnable 인터페이스 구현---------------- -----

Runnable 인터페이스를 구현하여 스레드를 생성하고 시작하는 일반적인 단계는 다음과 같습니다.

1] Runnable 인터페이스의 구현 클래스를 정의하고 run()을 다시 작성합니다. 이 run() 메소드는 Thread의 run() 메소드와 동일합니다. 스레드의 실행 본문도 동일합니다

2] Runnable 구현 클래스의 인스턴스를 생성하고 이 인스턴스를 대상으로 사용합니다. 이 Thread 개체는 실제 스레드 개체입니다

3] 세 번째 부분은 여전히 ​​스레드 개체의 start() 메서드를 호출하여 시작됩니다.

코드 예:

public class MyThread2 implements Runnable {//实现Runnable接口
  public void run(){
  //重写run方法
  }
}
public class Main {
  public static void main(String[] args){
    //创建并启动线程
    MyThread2 myThread=new MyThread2();
    Thread thread=new Thread(myThread);
    thread().start();
    //或者    new Thread(new MyThread2()).start();
  }
}

-------------------------Callable을 사용하여 Future로 스레드 만들기 ----------------- ---------

Runnable 인터페이스와 달리 Callable 인터페이스는 스레드 실행 본문으로 call() 메서드를 제공하며, call() 메서드는 run() 메서드보다 더 강력합니다 .

》call() 메소드는 반환 값을 가질 수 있습니다

》call() 메소드는 예외를 발생시키도록 선언될 수 있습니다.

Java5는 호출의 반환 값을 나타내는 Future 인터페이스를 제공합니다( ) 메소드가 있으며 Future 인터페이스에는 FutureTask 구현 클래스가 제공됩니다. 이 구현 클래스는 Future 인터페이스와 Runnable 인터페이스를 모두 구현하므로 Thread 클래스의 대상으로 사용할 수 있습니다. 연관된 호출 가능 태스크를 제어하기 위해 Future 인터페이스에 여러 공개 메소드가 정의되어 있습니다.

>boolean cancel(boolean mayInterruptIfRunning): View는 Future

>V get(): Callable에서 call() 메소드의 반환 값을 반환합니다. 이 메소드를 호출하면 프로그램이 다음을 수행합니다. 자식 스레드가 종료된 후 반환 값을 얻을 때까지 기다려야 합니다.

> V get(long timeout, TimeUnit 단위): Callable에서 call() 메서드의 반환 값을 반환합니다. 최대 시간 초과 동안 차단됩니다. 지정된 시간 이후에 반환이 발생하지 않으면 TimeoutException이 발생합니다

> ;boolean isDone(): Callable 작업이 완료되면 True를 반환합니다

>boolean isCancelled(): Callable 작업이 이전에 취소된 경우 Callable 작업이 정상적으로 완료되면 True를 반환합니다

관련 개념을 소개한 후 반환 값을 생성하고 시작합니다. 스레드의 단계는 다음과 같습니다.

1] Callable 인터페이스의 구현 클래스를 생성하고 호출을 구현합니다( ) 메서드를 사용한 다음 구현 클래스의 인스턴스를 생성합니다(java8부터 시작하여 Lambda 표현식을 사용하여 Callable 객체를 직접 생성할 수 있습니다).

2] FutureTask 클래스를 사용하여 Callable 객체의 call() 메서드의 반환 값을 캡슐화하는 Callable 객체를 래핑합니다.

3] FutureTask 객체를 Thread 객체의 대상으로 사용하여 생성합니다. 그리고 스레드를 시작합니다(FutureTask가 Runnable 인터페이스를 구현했기 때문에)

4] 하위 스레드 실행이 끝난 후 반환 값을 얻으려면 FutureTask 개체의 get() 메서드를 호출하세요

코드 예:

public class Main {
  public static void main(String[] args){
   MyThread3 th=new MyThread3();
   //使用Lambda表达式创建Callable对象
     //使用FutureTask类来包装Callable对象
   FutureTask<Integer> future=new FutureTask<Integer>(
    (Callable<Integer>)()->{
      return 5;
    }
    );
   new Thread(task,"有返回值的线程").start();//实质上还是以Callable对象来创建并启动线程
    try{
    System.out.println("子线程的返回值:"+future.get());//get()方法会阻塞,直到子线程执行结束才返回
    }catch(Exception e){
    ex.printStackTrace();
   }
  }
}

---------- ----------------3가지 스레드 생성 방법 비교---- ------------- --------

Runnable 인터페이스와 Callable 인터페이스를 구현하는 방법은 기본적으로 동일합니다. 다만 후자는 call() 메소드 실행 시 반환 값이 있고, 후자는 스레드 실행 본문의 run() 메소드에는 반환 값이 없으므로 이 두 메소드의 차이점은 하나로 분류할 수 있습니다. Thread 클래스를 상속하는 메서드는 다음과 같습니다.

1. 스레드는 Runnable 또는 Callable 인터페이스만 구현하며 다른 클래스도 상속할 수 있습니다.

2. 이런 방식으로 여러 스레드가 대상 개체를 공유할 수 있으며, 이는 여러 스레드가 동일한 리소스를 처리하는 상황에 매우 적합합니다.

3. 하지만 프로그래밍이 약간 복잡합니다. 현재 스레드에 액세스해야 하는 경우 Thread.currentThread() 메서드를 호출해야 합니다.

4. Thread 클래스를 상속하는 스레드 클래스는 다른 상위 클래스를 상속할 수 없습니다(Java 단일 상속 결정).

참고: 일반적으로 멀티 스레드를 생성하기 위해 인터페이스를 구현하는 것이 좋습니다

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오 코스를 방문하세요! !

위 내용은 Java에서 스레드를 생성하는 세 가지 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

PHP 튜토리얼
1596
276
자바의 교착 상태는 무엇이며 어떻게 막을 수 있습니까? 자바의 교착 상태는 무엇이며 어떻게 막을 수 있습니까? Aug 23, 2025 pm 12:55 PM

Adeadlockinjavaoccurswhentwoormorethreadsareblockedsforever,, 일반적으로, 일반적으로 duetocircularwaitcausedbyinconsentlockordering; thiscanbeptrededbectedbectedbectedbectedbectedbectefeartefournecessaryconditions —MutualExclusion, holdandwait, nopualwait, nopualclusion, nopualclusion

현재 NVIDIA GPU에 첨부 된 디스플레이를 사용하고 있지 않습니다 [고정]. 현재 NVIDIA GPU에 첨부 된 디스플레이를 사용하고 있지 않습니다 [고정]. Aug 19, 2025 am 12:12 AM

ifyousee "YourEnotusingAdisplayAttachedToannvidiagpu,"YourMonitorIsConnectedTothenVidiagpupport, configuredisplaysettingsinnvidiacontrolpanel, updatedRiversUsingDduandcleanInstall, 및 setTheprestOdcreteinbios/uefi

Java에서 선택 사항을 사용하는 방법은 무엇입니까? Java에서 선택 사항을 사용하는 방법은 무엇입니까? Aug 22, 2025 am 10:27 AM

useOptional.empty (), 옵션.의 (), andoptional.ofnullable () theCreateOptionalInstancesDependingOnsabsent, non-null, orpossiblynull.2.checkforvaluessafelyusingispresent () orpreferlyinglioid () toaviDIDHECK.3

PS 유일 페인트 필터 회색 수정 PS 유일 페인트 필터 회색 수정 Aug 18, 2025 am 01:25 AM

theoilpaintfilterinphotoshopisgreyedoutus는 compatibledocumentoRlayertype를 incizeofindphotoshopcs6orlaterinthefulldesktopversion을 보장하고, mode 및 mouctipixureapioreapeLay ray를 확인합니다

안전한 코딩을위한 JCA (Java Cryptography Architecture) 안전한 코딩을위한 JCA (Java Cryptography Architecture) Aug 23, 2025 pm 01:20 PM

제공자 메커니즘을 통해 알고리즘을 구현하는 MessageDigest, Cipher, Keygenerator, Securandom, Signature, Keystore 등과 같은 JCA 핵심 구성 요소를 이해합니다. 2. SHA-256/SHA-512, AES (256 비트 키, GCM 모드), RSA (2048 비트 이상) 및 Securerandom과 같은 강력한 알고리즘 및 매개 변수를 사용하십시오. 3. 하드 코딩 된 키를 피하고 KeyStore를 사용하여 키를 관리하고 PBKDF2와 같은 안전하게 파생 된 암호를 통해 키를 생성합니다. 4. ECB 모드 비활성화, GCM과 같은 인증 암호화 모드를 채택하고 각 암호화에 고유 한 IV를 사용하고 민감한 민감한 IV를 시간에 사용하십시오.

Micronaut로 구름 신용 Java 응용 프로그램 구축 Micronaut로 구름 신용 Java 응용 프로그램 구축 Aug 20, 2025 am 01:53 AM

micronautisidealforbuildingcloud-nativejavaapplicationsduetoitslowmemoryfootprint, faststartuptimes 및 compile-timedectional encection, mateituperiortotraditionalframslikespringbootformicroservices, andserverlessenvonderments.1.microna

스프링 데이터 JPA 및 최대 절전 모드와의 Java 지속성 스프링 데이터 JPA 및 최대 절전 모드와의 Java 지속성 Aug 22, 2025 am 07:52 AM

SpringDataJPA 및 최대 절전 모드의 핵심은 다음과 같습니다. 1. JPA는 사양이고 최대 절전 모드는 구현, SpringDataJPA 캡슐화는 DAO 개발을 단순화합니다. 2. 엔티티 클래스 @entity, @id, @column 등을 통해 데이터베이스 구조를 맵핑합니다. 3. 저장소 인터페이스는 JParePository를 상속하여 CRUD 및 명명 된 쿼리 메소드를 자동으로 구현합니다. 4. 복잡한 쿼리 @Query 주석을 사용하여 JPQL 또는 기본 SQL을 지원합니다. 5. SpringBoot에서는 스타터 종속성을 추가하고 데이터 소스 및 JPA 속성을 구성하여 통합이 완료됩니다. 6. 거래는 @transactiona에 의해 이루어집니다

고정 : Windows는 '필요한 권한은 클라이언트가 보유하지 않습니다'를 보여줍니다. 고정 : Windows는 '필요한 권한은 클라이언트가 보유하지 않습니다'를 보여줍니다. Aug 20, 2025 pm 12:02 PM

runeApplicationOrCommandAsAdMinistratorByright-Clicking andSelecting "RunasAdMinStrator"TONESUREELEVATEDPRIVILEGESERANTED.2.CHECKUSERACCOUNTCONTROL (UAC) SETCTINGSBYSERCHINGFORUACINTHARTMENUANDSTITTINGTHETEDEFAULLEVEL (SecondFrff

See all articles