Java에서 스레드를 생성하는 세 가지 방법은 무엇입니까?
Java에서 스레드를 생성하는 세 가지 방법은 다음과 같습니다. 1. Thread 클래스를 상속하여 스레드를 생성합니다. 2. Runnable 인터페이스를 구현하여 스레드를 생성합니다. 3. Callable 및 Future를 사용하여 스레드를 생성합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

Adeadlockinjavaoccurswhentwoormorethreadsareblockedsforever,, 일반적으로, 일반적으로 duetocircularwaitcausedbyinconsentlockordering; thiscanbeptrededbectedbectedbectedbectedbectedbectefeartefournecessaryconditions —MutualExclusion, holdandwait, nopualwait, nopualclusion, nopualclusion
![현재 NVIDIA GPU에 첨부 된 디스플레이를 사용하고 있지 않습니다 [고정].](https://img.php.cn/upload/article/001/431/639/175553352135306.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
ifyousee "YourEnotusingAdisplayAttachedToannvidiagpu,"YourMonitorIsConnectedTothenVidiagpupport, configuredisplaysettingsinnvidiacontrolpanel, updatedRiversUsingDduandcleanInstall, 및 setTheprestOdcreteinbios/uefi

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

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

제공자 메커니즘을 통해 알고리즘을 구현하는 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를 시간에 사용하십시오.

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

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

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