이 기사에서는 주로 스레드와 관련된 문제를 정리하는 java에 대한 관련 지식을 제공합니다. 스레드는 프로그램 내의 실행 경로입니다. 실제로는 별도의 실행 경로만 있으면 됩니다. 프로그램에 하나의 실행 경로가 있다면 그 프로그램은 단일 스레드 프로그램임을 살펴보겠습니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: "java 비디오 튜토리얼"
스레드는 프로그램 내부의 실행 경로입니다. 우리에게 친숙한 주요 방법은 실제로 프로그램에 실행 경로가 하나만 있는 경우입니다. 그렇다면 이 프로그램은 단일 스레드 프로그램입니다. 단일 스레드가 있으므로 멀티 스레드도 있을 것입니다. 문자 그대로의 의미는 "단일 스레드를 기준으로 소프트웨어 및 하드웨어에서 여러 프로세스를 실행하는 기술"로 이해될 수 있습니다. ." 멀티스레딩의 이점은 CPU 사용률 향상입니다. 다중 스레드 프로그램에서 하나의 스레드가 기다려야 할 때 CPU는 기다리는 대신 다른 스레드를 실행할 수 있어 프로그램의 효율성이 크게 향상됩니다.
방법 1 생성 프로세스:
MyThread 하위 클래스를 정의하여 java.lang.Thread 스레드 클래스를 상속하고 run() 메서드를 재정의합니다.
장점: 간단한 코딩
단점: 스레드 클래스는 Thread를 상속했으며 다른 클래스를 상속할 수 없습니다. 이는 확장에 도움이 되지 않습니다.
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接口 | 扩展性强,实现该接口的同时还可以继承其他的类,可以得到线程的执行结果 | 编程相对复杂 |
方法名称 | 说明 |
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
方法名称 | 说明 |
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!