首页 > Java > java教程 > 正文

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

PHPz
发布: 2024-07-12 10:18:01
原创
1093人浏览过

并发编程中常用的设计模式有:executor:管理线程池并提交任务,简化线程管理。future:表示异步执行的任务,允许在任务完成前访问结果或取消任务。completablefuture:增强了 future,提供了更复杂的异步流程构建功能。semaphore:限制同时访问特定资源的线程数量,防止资源超载。threadlocal:为每个线程提供私有数据存储,避免线程安全问题。

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

Java 框架并发编程中的常用设计模式

并发编程在 Java 框架中至关重要,需要有效地协调并行任务。以下是一些最常用的设计模式,可用于简化和有效实现并发代码:

Executor

立即学习Java免费学习笔记(深入)”;

  • 用途:管理线程池并提交任务。
  • 好处:抽象了线程管理,提供了动态扩展和优化性能的方法。
  • 示例:
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> System.out.println("Task completed"));
登录后复制

Future

比格设计
比格设计

比格设计是135编辑器旗下一款一站式、多场景、智能化的在线图片编辑器

比格设计 124
查看详情 比格设计
  • 用途:表示异步执行的任务。
  • 好处:允许在任务完成之前访问结果或取消任务。
  • 示例:
Future<String> future = executor.submit(() -> "Task result");
String result = future.get();
登录后复制

CompletableFuture

  • 用途:增强了 Future,提供了更多的并发功能,例如组合和转换任务。
  • 好处:允许轻松构建复杂的异步流程。
  • 示例:
CompletableFuture<String> future = new CompletableFuture<>();
executor.submit(() -> {
    String result = "Task result";
    future.complete(result);
});
登录后复制

Semaphore

  • 用途:限制同时访问特定资源的线程数量。
  • 好处:防止资源超载并确保公平访问。
  • 示例:
Semaphore semaphore = new Semaphore(10); // 允许 10 个线程同时访问
semaphore.acquire(); // 获得许可证
try {
    // 访问资源
} finally {
    semaphore.release(); // 释放许可证
}
登录后复制

ThreadLocal

  • 用途:为每个线程提供其自己的私有数据存储。
  • 好处:避免线程安全问题,轻松访问线程特定数据。
  • 示例:
ThreadLocal<String> threadLocal = new ThreadLocal<>();
threadLocal.set("Thread-specific data");
String data = threadLocal.get();
登录后复制

实战案例:并发文件读取

以下是一个使用 Executor 和 Future 模式读取文件的并发案例:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.*;

public class FileLinesReader {

    private static final int NUM_THREADS = 10;

    public static void main(String[] args) throws IOException, InterruptedException {
        Path path = Paths.get("input.txt");
        ExecutorService executor = Executors.newFixedThreadPool(NUM_THREADS);

        List<Future<List<String>>> futures = submitFileLinesProcessing(executor, path);
        List<String> lines = collectFileLines(futures);

        for (String line : lines) {
            System.out.println(line);
        }
    }

    private static List<Future<List<String>>> submitFileLinesProcessing(
            ExecutorService executor, Path path) throws IOException {
        List<Future<List<String>>> futures = new ArrayList<>();

        for (int i = 0; i < NUM_THREADS; i++) {
            futures.add(executor.submit(() -> Files.readAllLines(path)));
        }

        return futures;
    }

    private static List<String> collectFileLines(
            List<Future<List<String>>> futures) throws InterruptedException, ExecutionException {
        List<String> lines = new ArrayList<>();

        for (Future<List<String>> future : futures) {
            lines.addAll(future.get());
        }

        return lines;
    }
}
登录后复制

以上就是Java框架并发编程中有哪些常用设计模式?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号