ZVVQ代理分享网

Java框架并发编程中有哪些常用设计模式?(jav

作者:zvvq博客网
导读并发编程中常用的设计模式有:executor:管理线程池并提交任务,简化线程管理。future:表示异步执行的任务,允许在任务完成前访问结果或取消任务。completablefuture:增强了 future,提

并发编程常用的设计模式有:executor:管理线程池并提交任务,简化进程管理。future:表明异步执行任务,允许在任务结束前浏览结论或取消任务。completablefuture:提升了 future,带来了更为复杂异步步骤搭建作用。semaphore:限定同时浏览特殊资源线程数量,避免资源超重。threadlocal:为每个进程给予私文件存储,防止线程安全问题。

Java 架构并发编程里的常见设计模式

并发编程在 Java 框架中尤为重要,必须高效地融洽并行任务。以下是一些最常见的设计模式,适合于简化和有效实现并发编码:

Executor

用途:管理线程池并提交任务。 益处:抽象了进程管理,带来了动态拓展和改进特性的方式。 实例:

ExecutorServiceexecutor=Executors.newFixedThreadPool(10);

executor.submit(()->System.out.println("Taskcompleted"));

Future

用途:表明异步执行任务。益处:容许在任务完成之前浏览结论或取消任务。实例:

Future future=executor.submit(()->"Taskresult");

Stringresult= future.get();

CompletableFuture

用途:提升了 Future,提供了更多并发作用,比如组合和变换任务。益处:容许轻松搭建繁杂的异步步骤。实例:

CompletableFuture future=newCompletableFuture<>();

executor.submit(()->{

Stringresult="Taskresult";

future.complete(result);

});

Semaphore

用途:限定同时浏览特殊资源线程数量。益处:避免资源超重以确保公平浏览。实例:

Semaphoresemaphore=newSemaphore(10);//容许 10 个进程同时浏览

semaphore.acquire(); // 得到许可证

try {

// 浏览资源

} finally {

semaphore.release(); // 释放许可证

}

ThreadLocal

用途:为每个进程提供其自已的私文件存储。益处:防止线程安全问题,轻松浏览进程特殊数据。实例:1

ThreadLocalthreadLocal=newThreadLocal<>();

threadLocal.set("Thread-specificdata");

Stringdata=threadLocal.get();

实战案例 :并发文件读取

下列是一个应用 Executor 和 Future方式读取文件的并发实例:

importjava.io.IOException;

importjava.nio.file.Files;

importjava.nio.file.Path;

importjava.nio.file.Paths;

importjava.util.List;

importjava.util.concurrent.;

publicclassFileLinesReader{

privatestaticfinalintNUM_THREADS=10;

publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{

Pathpath=Paths.get("input.txt");

ExecutorServiceexecutor=Executors.newFixedThreadPool(NUM_THREADS);

List>> futures=submitFileLinesProcessing(executor,path);

Listlines=collectFileLines(futures);

for(Stringline:lines){

System.out.println(line);

}

}

privatestaticList>>submitFileLinesProcessing(

ExecutorServiceexecutor,Pathpath)throwsIOException{

List>> futures=newArrayList<>();

for(inti=0;i

futures.add(executor.submit(()->Files.readAllLines(path)));

}

return futures;

}

privatestaticListcollectFileLines(

List>> futures)throwsInterruptedException,ExecutionException{

Listlines=newArrayList<>();

for(Future> future: futures){

lines.addAll(future.get());

}

returnlines;

}

}

以上就是Java架构并发编程中有哪些常见设计模式?的详细内容,大量请关注其他类似文章!