并发编程常用的设计模式有: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架构并发编程中有哪些常见设计模式?的详细内容,大量请关注其他类似文章!