原帖地址在这里:http://www.iteye.com/topic/711162
引用
前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果。
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
public class BigListSum {
/**
* @param args
*/
private static List<Integer> list=new LinkedList<Integer>();
private static int max=100000;
public static List<Integer> setList(int max){
for(int i=0;i<max;i++)
list.add(i+1);
//System.out.println(list.size());
return list;
}
public static void main(String[] args)throws Exception {
BigListSum bls=new BigListSum();
BigListSum.setList(max);
int threadCount=10;
int len=list.size()/threadCount+1;
AtomicCounter counter=bls.new AtomicCounter();
for(int i=0;i<threadCount;i++){
if(len*i<list.size())
bls.new subThread("thread"+i,list,len*i,len,counter).start();
}
}
class subThread extends Thread{
private AtomicCounter counter;
private List<Integer> childList;
private int offset;
private int len;
protected subThread(String name,List<Integer> list,int offset,int len,AtomicCounter counter){
super(name);
this.counter=counter;
this.offset=offset;
if((offset+len)>list.size()){
this.len=list.size()-offset;
}else{
this.len=len;
}
childList=list.subList(this.offset, this.offset+this.len);
}
public void run(){
long sum=0;
if(childList.size()>0){
for(int i=0;i<childList.size();i++){
sum+=childList.get((int)i);
}
counter.increment(sum);
}
System.out.println(Thread.currentThread().getName()+":["+
this.childList.get(0)+"<-->"+this.childList.get(this.childList.size()-1)+
"].count:"+counter.getValue());
}
}
class AtomicCounter{
private AtomicLong sum=new AtomicLong();
public AtomicCounter(){
}
public AtomicCounter(long value){
sum.set(value);
}
public long getValue(){
return sum.get();
}
public long increment() {
return sum.incrementAndGet();
}
public long increment(long i) {
return sum.addAndGet(i);
}
public long decrement() {
return sum.decrementAndGet();
}
public long decrement(long i) {
return sum.addAndGet(-i);
}
}
}
output:
thread9:[90010<-->100000].count:949194955
thread0:[1<-->10001].count:999209956
thread8:[80009<-->90009].count:1849384965
thread1:[10002<-->20002].count:1999419967
thread7:[70008<-->80008].count:2749574975
thread2:[20003<-->30003].count:2999629978
thread6:[60007<-->70007].count:3649764985
thread3:[30004<-->40004].count:3999839989
thread5:[50006<-->60006].count:4549954995
thread4:[40005<-->50005].count:5000050000
利用的是原子操作,无同步
分享到:
相关推荐
【三峡大坝坛子岭导游词】是一篇详细介绍三峡大坝坛子岭景区的导游词,主要用于引导游客深入了解三峡工程的壮观与历史文化。坛子岭因其地貌特征酷似倒扣的坛子而得名,海拔262.48米,是欣赏三峡大坝全景的最佳地点,...
文中提到的“坛子里的资料”可能指的是各种在线论坛或社区中的备考资料,强调这些免费资源的价值远超过付费培训班。 - 自主学习的重要性被突出强调,认为只要个人努力,无需依赖昂贵的培训课程。 ### 二、面试技巧...
在这首诗中,诗人通过一个简单的坛子放置在田纳西州的一个小山上,描绘了自然与人工物之间的互动。坛子的出现改变了周围的环境,原本杂乱无章的荒野开始围绕着坛子聚集起来,呈现出一种秩序感。 #### 主题解读 1. ...
Anecdoteofthejar坛子的轶事PPT学习教案.pptx
描述中提到的“范文”表明这是一个用来示范写作技巧或者展示故事讲述方法的文本。 在标签“范文”下,我们可以理解这篇作文可能作为教学材料,用来教导学生如何构思和撰写故事,尤其是如何通过物象对话来揭示主题。...
标题 "行业资料-建筑装置-带平台的酸菜坛子.zip" 描述表明这是一个包含关于建筑装置设计中特殊应用的文档集,特别关注于带有平台的酸菜坛子。这可能涉及到以下几个方面的知识点: 1. **建筑设计背景**:在现代建筑...
- 第二道题目中的故事描述了一个场景,大致意思是张母母去市场上买东西,先是买了瓜子(“拌壳儿”),然后又想买糖果(“孩子”),但由于卖糖果的人没有出现,最终没能买到。这里的“孩子”并非真正的孩子,而是...
制作泡菜的关键在于一个优质的"老盐水",也就是泡菜坛子的基本底料。下面将详细介绍制作过程及重要材料。 一、基本底料 1. 蜂蜜:蜂蜜在泡菜中的作用不可小觑,它能增加泡菜的脆感,并为酸味增添更多层次。如果蜂蜜...
例如,抛掷一个骰子,结果可能是1、2、3、4、5、6中的任何一个,这些结果都是事件。 互斥事件的定义:如果两个事件不能同时发生,那么这两个事件是互斥的。例如,抛掷一个骰子,结果是1和结果是2是两个互斥事件,...
设事件A为“从甲坛子里摸出一个白球”,事件B为“从乙坛子里摸出一个白球”。由于这两个事件的结果互不影响,它们是相互独立的。 要计算两个事件同时发生的概率P(A·B),可以将每个事件发生的概率相乘。事件A发生的...
由于这两个坛子是分开的,从一个坛子里摸球的结果不会影响另一个坛子摸球的概率,所以事件C和事件D也是相互独立的。 当两个事件相互独立时,它们同时发生的概率等于各自发生的概率的乘积。例如,如果事件A发生的...
5. 前运算阶段:瑶瑶的认知发展水平处于前运算阶段,她容易受表面现象影响,误认为坛子里的牛奶多。 6. 知识基础与新学习的关系:温故而知新体现了复习旧知识对学习新知识的直接影响。 7. 新课程结构:小学阶段以...
例如,从两个坛子里分别摸出一个球,如果甲坛子里的球是白球或黑球,不影响乙坛子里的球的颜色概率。 定义:事件 A 和事件 B 称为相互独立事件,当且仅当事件 A 的发生或不发生都不影响事件 B 的概率。 判断事件...
这篇文档实际上是一个关于个人护肤经验分享的文档,主要面向混合性皮肤的女性,特别是那些长时间使用电脑的人。文档中提到了几种不同的国货护肤品,并详细描述了它们的使用感受和效果。 首先,少女之春黄瓜洗面奶因...
题目中,要求计算从坛子中取出两个红球且至少有一个球号码为偶数的概率,需要分情况讨论,并利用概率的加法和乘法规则求解。 7. **几何概率**:第七题涉及几何概率,特别是与乒乓球比赛的胜率有关。题目描述了甲以3...
取一个大坛子,用炭火围着烤,让囚犯进去,还有什么不会承认的呢!” - 因起谓兴曰:“有内状推兄,请兄入此瓮!”:于是站起来对周兴说:“有人指控你,麻烦你也进这个大坛子里吧!” 来俊臣请周兴入瓮,是采用了...
这是英文原版。国内现在已经引进:“Aliprantis;...坛子里已经有了,需要者自己搜索下。 标题:实分析习题及解答 作者:B. Gelbaum;常心怡、李元中、鲁石、冯汉桥等编译 版本:中文版 页数:335,正文331页
问了坛子里的一些朋友,好像也没有这种简单的现成的工具,于是一咬牙一跺脚,自己写吧。顺便把多个图片合并也写进去了,目前只是测试了自己需要的部分(仅BMP格式),和源码一起放出来,希望对你有用,不够用自己去...
这些内容实际上是一系列的故事或情境片段,每个片段都是一个小故事的一部分,主要涉及小学生可能遇到的语文练习题,比如排序句子组成一个完整的故事或情境。这些练习题旨在锻炼学生的逻辑思维和语言组织能力。以下是...