zvvq技术分享网

Java框架异步编程与多线程编程的区别是什么?(

作者:zvvq博客网
导读Java 异步编程与多线程编程的区别 Java 中的 异步编程 和 多线程编程 都是并发编程的技术,但它们在实现方式和适用场景上存在着差异。 多线程编程 实现方式: 使用线程(Thread 类)。

zvvq

Java 异步编程与多线程编程的差别Java 中的 异步编程 和 多线程编程 全是并发编程的技术,但它们在实现方式和适用场景上存在差别。

内容来自zvvq,别采集哟

多线程编程实现方式: 应用进程(Thread 类)。每个进程都有各自的执行栈和局部变量,他们同时运行在同一过程内。特性:

zvvq好,好zvvq

同歩: 多个线程能够访问共享变量,需要用到锁(如 synchronized 关键词)来确保并发安全。 堵塞: 一个进程可能会因等候别的线程的进行(如 join() 方式)而堵塞。 适用场景: 适用必须高度并发的情景,比如计算密集型任务。异步编程实现方式: 应用回调函数或未来对象(Future)。它基于事件驱动,并在后台执行任务时不堵塞启用进程。特性:

本文来自zvvq

非阻塞: 启用进程不会等候异步任务进行,能够执行其他任务。 调整体制: 当异步任务完成了,根据回调函数或未来对象通告启用进程。 适用场景: 适用 I/O 操作或其它依靠外部资源任务,比如网络请求或文件读写。实战案例多线程编程实例: 测算一个数组中所有元素总和。

copyright zvvq

public class MultithreadingExample { 内容来自samhan

public static void main(String[] args) { zvvq好,好zvvq

int[] array = {1, 2, 3, 4, 5};

内容来自zvvq

int numThreads = 4; // 应用 4 个进程 zvvq

// 创建一个 AtomicInteger 目标来保存总数,以确保并发安全

copyright zvvq

AtomicIntegertotal=newAtomicInteger();

zvvq.cn

// 建立并启动线程池 zvvq.cn

ExecutorServiceexecutorService=Executors.newFixedThreadPool(numThreads); 内容来自samhan

// 递交测算任务

zvvq好,好zvvq

for(inti=0;i

内容来自samhan

executorService.submit(()->{ copyright zvvq

// 测算该元素奉献

内容来自zvvq,别采集哟

intcontribution=array[i]/numThreads;

内容来自samhan666

// 对总数开展分子升级

内容来自samhan666

total.addAndGet(contribution);

内容来自zvvq,别采集哟

}); 内容来自zvvq,别采集哟

}

zvvq.cn

// 关掉线程池

copyright zvvq

executorService.shutdown(); zvvq

// 等候线程池完成所有任务

内容来自zvvq,别采集哟

while(!executorService.isTerminated()){

内容来自zvvq

// 等候

内容来自samhan

}

zvvq好,好zvvq

// 打印总数 内容来自zvvq

System.out.println("Total: " + total);

内容来自zvvq

}

内容来自zvvq

}

内容来自zvvq

异步编程实例: 下载一个文档并打印内容。 zvvq

importjava.io.IOException; 内容来自samhan

importjava.net.URI; 内容来自samhan

importjava.net.http.HttpClient; 内容来自samhan

importjava.net.http.HttpRequest;

内容来自zvvq

importjava.net.http.HttpResponse;

内容来自samhan

importjava.util.concurrent.CompletableFuture; zvvq好,好zvvq

publicclassAsyncProgrammingExample{ zvvq.cn

publicstaticvoidmain(String[]args){ 内容来自zvvq,别采集哟

// 异步下载文件 内容来自samhan666

HttpClientclient=HttpClient.newHttpClient(); 内容来自samhan666

URIuri=URI.create("http://path/to/file.txt"); zvvq好,好zvvq

HttpRequestrequest=HttpRequest.newBuilder(uri).GET().build(); 本文来自zvvq

CompletableFuture>responseFuture=client.sendAsync(request,HttpResponse.BodyHandlers.ofString()); zvvq

// 在后台执行下载操作 内容来自zvvq,别采集哟

responseFuture.thenAccept(response->{ 内容来自samhan666

// 当下载完成时,打印文件内容 内容来自samhan666

System.out.println("File contents: " + response.body()); zvvq好,好zvvq

});

zvvq好,好zvvq

} 内容来自samhan666

}

zvvq好,好zvvq

结果多线程编程适用于高度并发的测算任务,而异步编程更适用于 I/O 操作或依靠外部资源任务。二者的挑选在于具体情境与性能需求。 内容来自zvvq

以上就是Java架构异步编程与多线程编程的区别是什么?的详细内容,大量请关注其他类似文章!

copyright zvvq