当前位置: 首页 > ds >正文

java学习——guava并发编程练习

一直学习理论怎么能不做练习呢?下面我将出几个编程题来巩固编程。

练习1:

新建三个线程,使用并发编程,同时计算三个线程的数并且输出计算的过程,线程1计算从1加到100,线程2计算50的阶乘,线程三计算根号三并且输出小数点后十位。

答案

import com.google.common.util.concurrent.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;public class MultiThreadCalculator {// 创建监听线程池private static final ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(3));public static void main(String[] args) {// 启动三个计算任务ListenableFuture<?> additionFuture = executor.submit(new AdditionTask());ListenableFuture<?> multiplicationFuture = executor.submit(new MultiplicationTask());ListenableFuture<?> sqrtFuture = executor.submit(new SquareRootTask());// 添加回调处理异常Futures.addCallback(additionFuture, new LoggingCallback(), executor);Futures.addCallback(multiplicationFuture, new LoggingCallback(), executor);Futures.addCallback(sqrtFuture, new LoggingCallback(), executor);// 等待所有任务完成ListenableFuture<?> allFutures = Futures.allAsList(additionFuture, multiplicationFuture, sqrtFuture);try {allFutures.get();System.out.println("\n所有计算任务完成!");} catch (Exception e) {e.printStackTrace();} finally {executor.shutdown();}}// 加法任务:计算1加到100static class AdditionTask implements Runnable {@Overridepublic void run() {int sum = 0;for (int i = 1; i <= 100; i++) {sum += i;System.out.println("[加法线程] 添加 " + i + " → 当前总和: " + sum);Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);}System.out.println("\n[加法线程] 最终结果: 1到100的和 = " + sum);}}// 乘法任务:计算2乘到50(使用BigInteger避免溢出)static class MultiplicationTask implements Runnable {@Overridepublic void run() {BigInteger product = BigInteger.ONE;for (int i = 2; i <= 50; i++) {product = product.multiply(BigInteger.valueOf(i));System.out.println("[乘法线程] 乘以 " + i + " → 当前乘积: " + product);Uninterruptibles.sleepUninterruptibly(70, TimeUnit.MILLISECONDS);}System.out.println("\n[乘法线程] 最终结果: 2到50的乘积 = " + product);}}// 开方任务:计算√3的小数点后10位数字static class SquareRootTask implements Runnable {@Overridepublic void run() {// 计算√3到小数点后20位精度BigDecimal sqrt3 = BigDecimal.valueOf(3).sqrt(new MathContext(20));String decimalPart = sqrt3.toString().split("\\.")[1];System.out.println("[开方线程] √3 完整值: " + sqrt3);// 输出小数点后10位数字for (int i = 0; i < 10; i++) {if (i < decimalPart.length()) {char digit = decimalPart.charAt(i);System.out.println("[开方线程] 小数点后第" + (i+1) + "位: " + digit);} else {System.out.println("[开方线程] 小数点后第" + (i+1) + "位: 0");}Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);}// 只输出前10位小数String result = decimalPart.length() >= 10 ? decimalPart.substring(0, 10) : decimalPart;System.out.println("\n[开方线程] 最终结果: √3 ≈ " + result);}}// 通用回调处理static class LoggingCallback implements FutureCallback<Object> {@Overridepublic void onSuccess(Object result) {// 任务成功完成,无需特别处理}@Overridepublic void onFailure(Throwable t) {System.err.println("任务失败: " + t.getMessage());t.printStackTrace();}}
}

练习2

和练习1一样,对线程的执行顺序有要求,要求线程1执行一半时执行线程2,线程2执行一半时执行线程3,等待线程3执行完毕后再执行线程2,线程2执行完毕后执行线程1,要求分清不同线程的执行过程

答案:

package org.example;import com.google.common.util.concurrent.*;import java.math.BigDecimal;
http://www.xdnf.cn/news/15026.html

相关文章:

  • Redis ①⑤-集群
  • Vue+Openlayers加载OSM、加载天地图
  • 周任务自动化升级:N8N与多维表格无缝联动全解析
  • 2025年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 【架构艺术】IC(个人贡献者)视角下产品研发规划的实战Tips
  • 一次内存“卡顿”全流程实战分析:从制造问题到优化解决
  • java中,stream的filter和list的removeIf筛选速度比较
  • JMM--数据原子操作
  • SpringAI与智能体入门
  • 解决kali Linux在VMware中的全局缩放问题
  • 量化可复用的UI评审标准(试验稿)
  • Python PyJWT详解:从入门到实战
  • 3dmax烘焙插件3dmax法线贴图烘焙教程glb和gltf元宇宙灯光效果图烘焙烘焙光影贴图支持VR渲染器
  • 针对工业触摸屏维修的系统指南和资源获取途径
  • NumPy-核心函数np.matmul()深入解析
  • CppCon 2018 学习:Surprises In Object Lifetime
  • 设计模式之访问者模式
  • 使用Langchain访问个人数据
  • SpringBoot系列—入门
  • PostgreSQL表操作
  • 深度学习5(深层神经网络 + 参数和超参数)
  • C++ 网络编程(15) 利用asio协程搭建异步服务器
  • 从数据洞察到设计创新:UI前端如何利用数字孪生提升用户体验?
  • 浏览器与服务器的交互
  • dify 1.5.1版本全面解析——知识库索引、动态参数及结构化输出插件全新登场
  • STM32的 syscalls.c 和 sysmem.c
  • 《C++初阶之类和对象》【经典案例:日期类】
  • RESTful API 安装使用教程
  • 黑马python(二十五)
  • Spring Boot + 本地部署大模型实现:优化与性能提升