主题:淘宝面试题:如何充分利用多核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

相关文章

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用