`
神之小丑
  • 浏览: 4270 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

看到坛子里一个淘宝的面试 题,自己随便写了一个

阅读更多
原帖地址在这里: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


利用的是原子操作,无同步
分享到:
评论

相关推荐

    三峡大坝坛子岭导游词.docx

    【三峡大坝坛子岭导游词】是一篇详细介绍三峡大坝坛子岭景区的导游词,主要用于引导游客深入了解三峡工程的壮观与历史文化。坛子岭因其地貌特征酷似倒扣的坛子而得名,海拔262.48米,是欣赏三峡大坝全景的最佳地点,...

    大连事业单位面试经验分享_面试技巧_个人简历.docx

    文中提到的“坛子里的资料”可能指的是各种在线论坛或社区中的备考资料,强调这些免费资源的价值远超过付费培训班。 - 自主学习的重要性被突出强调,认为只要个人努力,无需依赖昂贵的培训课程。 ### 二、面试技巧...

    Anecdoteofthejar坛子的轶事学习教案.pptx

    在这首诗中,诗人通过一个简单的坛子放置在田纳西州的一个小山上,描绘了自然与人工物之间的互动。坛子的出现改变了周围的环境,原本杂乱无章的荒野开始围绕着坛子聚集起来,呈现出一种秩序感。 #### 主题解读 1. ...

    Anecdoteofthejar坛子的轶事PPT学习教案.pptx

    Anecdoteofthejar坛子的轶事PPT学习教案.pptx

    坛子、酒瓶与苹果作文.doc

    描述中提到的“范文”表明这是一个用来示范写作技巧或者展示故事讲述方法的文本。 在标签“范文”下,我们可以理解这篇作文可能作为教学材料,用来教导学生如何构思和撰写故事,尤其是如何通过物象对话来揭示主题。...

    行业资料-建筑装置-带平台的酸菜坛子.zip

    标题 "行业资料-建筑装置-带平台的酸菜坛子.zip" 描述表明这是一个包含关于建筑装置设计中特殊应用的文档集,特别关注于带有平台的酸菜坛子。这可能涉及到以下几个方面的知识点: 1. **建筑设计背景**:在现代建筑...

    四川话八级考试题.docx

    - 第二道题目中的故事描述了一个场景,大致意思是张母母去市场上买东西,先是买了瓜子(“拌壳儿”),然后又想买糖果(“孩子”),但由于卖糖果的人没有出现,最终没能买到。这里的“孩子”并非真正的孩子,而是...

    泡菜坛子的基本底料.doc

    制作泡菜的关键在于一个优质的"老盐水",也就是泡菜坛子的基本底料。下面将详细介绍制作过程及重要材料。 一、基本底料 1. 蜂蜜:蜂蜜在泡菜中的作用不可小觑,它能增加泡菜的脆感,并为酸味增添更多层次。如果蜂蜜...

    两个相互独立事件同时发生的概率.ppt

    例如,抛掷一个骰子,结果可能是1、2、3、4、5、6中的任何一个,这些结果都是事件。 互斥事件的定义:如果两个事件不能同时发生,那么这两个事件是互斥的。例如,抛掷一个骰子,结果是1和结果是2是两个互斥事件,...

    相互独立事件同时发生的概率.ppt

    设事件A为“从甲坛子里摸出一个白球”,事件B为“从乙坛子里摸出一个白球”。由于这两个事件的结果互不影响,它们是相互独立的。 要计算两个事件同时发生的概率P(A·B),可以将每个事件发生的概率相乘。事件A发生的...

    独立事件PPT课件.ppt

    由于这两个坛子是分开的,从一个坛子里摸球的结果不会影响另一个坛子摸球的概率,所以事件C和事件D也是相互独立的。 当两个事件相互独立时,它们同时发生的概率等于各自发生的概率的乘积。例如,如果事件A发生的...

    山东省济南市市中区教师招聘考试真题及答案济南市中区考试题.doc

    5. 前运算阶段:瑶瑶的认知发展水平处于前运算阶段,她容易受表面现象影响,误认为坛子里的牛奶多。 6. 知识基础与新学习的关系:温故而知新体现了复习旧知识对学习新知识的直接影响。 7. 新课程结构:小学阶段以...

    相互独立事件发生的概率PPT课件.ppt

    例如,从两个坛子里分别摸出一个球,如果甲坛子里的球是白球或黑球,不影响乙坛子里的球的颜色概率。 定义:事件 A 和事件 B 称为相互独立事件,当且仅当事件 A 的发生或不发生都不影响事件 B 的概率。 判断事件...

    对电脑多的混合性皮肤MM超全国货体验给坛子里的M.doc

    这篇文档实际上是一个关于个人护肤经验分享的文档,主要面向混合性皮肤的女性,特别是那些长时间使用电脑的人。文档中提到了几种不同的国货护肤品,并详细描述了它们的使用感受和效果。 首先,少女之春黄瓜洗面奶因...

    吉林省汪清县第六中学2019-2020学年高二6月月考数学(理)试题 含解析.doc

    题目中,要求计算从坛子中取出两个红球且至少有一个球号码为偶数的概率,需要分情况讨论,并利用概率的加法和乘法规则求解。 7. **几何概率**:第七题涉及几何概率,特别是与乒乓球比赛的胜率有关。题目描述了甲以3...

    初一文言文课外阅读练习题附答案.doc

    取一个大坛子,用炭火围着烤,让囚犯进去,还有什么不会承认的呢!” - 因起谓兴曰:“有内状推兄,请兄入此瓮!”:于是站起来对周兴说:“有人指控你,麻烦你也进这个大坛子里吧!” 来俊臣请周兴入瓮,是采用了...

    实分析习题集二(含答案)

    这是英文原版。国内现在已经引进:“Aliprantis;...坛子里已经有了,需要者自己搜索下。 标题:实分析习题及解答 作者:B. Gelbaum;常心怡、李元中、鲁石、冯汉桥等编译 版本:中文版 页数:335,正文331页

    图片分解合成工具+原代码

    问了坛子里的一些朋友,好像也没有这种简单的现成的工具,于是一咬牙一跺脚,自己写吧。顺便把多个图片合并也写进去了,目前只是测试了自己需要的部分(仅BMP格式),和源码一起放出来,希望对你有用,不够用自己去...

    小学语文三年级、四年级、五年级、六年级、乱句语序排列练习题及答案.doc

    这些内容实际上是一系列的故事或情境片段,每个片段都是一个小故事的一部分,主要涉及小学生可能遇到的语文练习题,比如排序句子组成一个完整的故事或情境。这些练习题旨在锻炼学生的逻辑思维和语言组织能力。以下是...

Global site tag (gtag.js) - Google Analytics