Java의 스레드를 이해하는 방법을 이해하는 기사
이 기사에서는 주로 스레드와 관련된 문제를 정리하는 java에 대한 관련 지식을 제공합니다. 스레드는 프로그램 내의 실행 경로입니다. 실제로는 별도의 실행 경로만 있으면 됩니다. 프로그램에 하나의 실행 경로가 있다면 그 프로그램은 단일 스레드 프로그램임을 살펴보겠습니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: "java 비디오 튜토리얼"
스레드는 프로그램 내부의 실행 경로입니다. 우리에게 친숙한 주요 방법은 실제로 프로그램에 실행 경로가 하나만 있는 경우입니다. 그렇다면 이 프로그램은 단일 스레드 프로그램입니다. 단일 스레드가 있으므로 멀티 스레드도 있을 것입니다. 문자 그대로의 의미는 "단일 스레드를 기준으로 소프트웨어 및 하드웨어에서 여러 프로세스를 실행하는 기술"로 이해될 수 있습니다. ." 멀티스레딩의 이점은 CPU 사용률 향상입니다. 다중 스레드 프로그램에서 하나의 스레드가 기다려야 할 때 CPU는 기다리는 대신 다른 스레드를 실행할 수 있어 프로그램의 효율성이 크게 향상됩니다.
멀티 스레드 생성
방법 1: Thread 클래스 상속
방법 1 생성 프로세스:
MyThread 하위 클래스를 정의하여 java.lang.Thread 스레드 클래스를 상속하고 run() 메서드를 재정의합니다.
- MyThread 클래스의 개체를 만듭니다.
- 스레드를 시작하려면 스레드 개체의 start() 메서드를 호출합니다(run() 메서드는 시작 후에도 계속 실행됩니다). 위 코드에서 실행되는 스레드, 즉 main 메서드의 메인 스레드와 스레드 객체mythread에서 start()를 호출하여 시작된 하위 스레드입니다. 그런데 왜 출력 결과가 고유하지 않습니까? 그 이유는 실행 중에 두 스레드 사이에 CPU 선점이 발생하고, 먼저 점유한 사람이 먼저 실행되기 때문입니다.
- 그렇다면 스레드 객체를 직접 사용하여 run() 메서드를 호출하는 것은 어떨까요? run()을 직접 호출하면 그냥 일반적인 호출 메서드, 즉 단일 스레드가 되고, start() 메서드를 사용하면 자식 스레드를 시작하므로 멀티스레딩이 발생할 수 있습니다. 방법 1의 장점과 단점:
장점: 간단한 코딩
단점: 스레드 클래스는 Thread를 상속했으며 다른 클래스를 상속할 수 없습니다. 이는 확장에 도움이 되지 않습니다.
- 방법 2: Runnable 인터페이스 구현
- 메서드 2 생성 과정:
Runnable을 캡슐화 객체는 스레드 객체가 됩니다 | ||
Runnable 객체를 캡슐화하여 스레드 객체가 되며 스레드를 지정합니다. 이름 |
方法名称 | 说明 |
public FutureTask<>(Callable call) | 把Callable对象封装成FutureTask对象 |
public V get() throws Exception | 获取线程执行call方法返回的结果 |
public class ThreadDemo03 { public static void main(String[] args) throws Exception { MyCallable myCallable = new MyCallable(); FutureTask<String> futureTask = new FutureTask<>(myCallable); Thread thread = new Thread(futureTask); thread.start(); int sum= 0; for (int i = 0; i < 3; i++) { sum+=i; } System.out.println(sum); String s =futureTask.get(); System.out.println(s); } } class MyCallable implements Callable<String > { @Override public String call(){ int sum=0; for (int i = 0; i < 3; i++) { sum+=i; } return "子线程计算结果:"+sum; } } //输出结果: //3 //子线程计算结果:3
方式三优缺点:
优点:
线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强;
可以在线程执行完毕后去获取 线程执行的结果;
缺点:
编码复杂一点;
总结
方式 | 优点 | 缺点 |
继承Thread类 | 编程比较简单,可以直接使用Thread类中的方法 | 扩展性较差,不能再继承其他的类,不能返回线程执行的结果 |
实现Runnable接口 | 扩展性强,实现该接口的同时还可以继承其他的类 | 编程相对复杂,不能返回线程执行的结果 |
实现Callable接口 | 扩展性强,实现该接口的同时还可以继承其他的类,可以得到线程的执行结果 | 编程相对复杂 |
常用方法
Thread获取和设置线程名称
方法名称 | 说明 |
String getName() | 获取当前线程的名称,默认线程名称是Thread-索引 |
void setName(String name) | 将此线程更改为指定的名称,通过构造器也可以设置线程名称 |
简单地通过一段代码让大家能够清晰地了解这个代码该如何使用:
public class ThreadDemo04 { public static void main(String[] args) throws Exception { thread thread1 = new thread(); thread1.setName("1号子线程"); thread1.start(); thread thread2 = new thread(); thread2.setName("2号子线程"); thread2.start(); } } class thread extends Thread { @Override public void run() { for (int i = 0; i < 3; i++) { System.out.println(this.getName()+"正在执行任务"+i); } } } //输出结果: //2号子线程正在执行任务0 //1号子线程正在执行任务0 //2号子线程正在执行任务1 //1号子线程正在执行任务1 //2号子线程正在执行任务2 //1号子线程正在执行任务2
Thread类的线程休眠方法
方法名称 | 说明 |
public static void sleep(long time) | 让当前线程休眠指定的时间后再继续执行,单位为毫秒 |
public class ThreadDemo05 { public static void main(String[] args) throws Exception { for (int i = 0; i < 5; i++) { System.out.println(i); if (i==3){ Thread.sleep(5000); } } } } //输出结果: //1 //2 //3 //在输出过3以后,等待5秒之后再进行输出 //4
推荐学习:《java视频教程》
위 내용은 Java의 스레드를 이해하는 방법을 이해하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.