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

相关文章

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一