主题:淘宝面试题:如何充分利用多核CPU,计算很大的List中所有整数的和

本文主要是介绍主题:淘宝面试题:如何充分利用多核CPU,计算很大的List中所有整数的和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如题:论坛 帖子地址

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;public class MyWorkThread extends Thread {private List<integer> list;private int start, end;private long value;private Result result;public MyWorkThread(List<integer> list, Integer start, Integer end, Result result) {this.list = list;this.start = start;this.end = end;this.result = result;}private void add(int v) {if (Long.MAX_VALUE - v &gt; value) {value += v;} else {result.addSum(value);value = v;}}public void run() {try {for(int i = start; i  list = new ArrayList<integer>();for (int i = 0; i  threads = new ArrayList<thread>();for (;;) {end = start + len;if (end &gt; list.size()) end = list.size();threads.add(new MyWorkThread(list, start, end, result));start = end;if (start == list.size()) break;}result.setCountThread(threads.size());for (Thread thread : threads) {thread.start();}synchronized (result) {while(!result.isGameOver()) result.wait();}System.out.println("和为:" + result.getSum());}
}class Result {private BigDecimal sum;private int countFinish, countThread;public BigDecimal getSum() {return sum;}public void setCountThread(int countThread) {assert countThread &gt; 0;this.countThread = countThread;}private void checkGameOver() {if (isGameOver()) notifyAll();}public synchronized boolean isGameOver() {return countFinish &gt;= countThread;}public synchronized void addSum(long v) {sum = sum == null ? new BigDecimal(v) : sum.add(BigDecimal.valueOf(v));}public synchronized void finishA() {countFinish++;checkGameOver();}
}
 

这篇关于主题:淘宝面试题:如何充分利用多核CPU,计算很大的List中所有整数的和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582711

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于