并行计算π

public class pithread extends Thread {private static long mini=1000000000;private long start,diff;double sum=0;double cur=1/(double)mini;public pithread(long start,long diff) {this.start=start;this.diff=diff;}@Overridepublic void run() {long i=start;for(;i<mini;i+=diff){double x=(i+0.5)*cur;sum+=4/(1+x*x);}}public double getSum() {return sum;}public static void main(String[] args) {double t1,t2;pithread thread0=new pithread(1,1);t1=System.currentTimeMillis();thread0.start();try {thread0.join();} catch (InterruptedException e) {e.printStackTrace();}t2=System.currentTimeMillis();System.out.println("单线程时间:"+(double)(t2-t1)/1000+'秒');pithread thread5=new pithread(1,2);pithread thread6=new pithread(2,2);t1=System.currentTimeMillis();thread5.start();thread6.start();try {thread5.join();} catch (InterruptedException e) {e.printStackTrace();}t2=System.currentTimeMillis();System.out.println("2线程时间:"+(double)(t2-t1)/1000+'秒');pithread thread=new pithread(1,4);pithread thread2=new pithread(2,4);pithread thread3=new pithread(3,4);pithread thread4=new pithread(4,4);t1=System.currentTimeMillis();thread.start();thread2.start();thread3.start();thread4.start();try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}t2=System.currentTimeMillis();System.out.println("4线程时间:"+(double)(t2-t1)/1000+'秒');}
}

并行计算多位π

public class CalculatePThread {static BigDecimal tempt = new BigDecimal(0);public synchronized static void  add(BigDecimal bigDecimal){tempt= tempt.add(bigDecimal);}public static void main(String[] args) {ExecutorService executorService=Executors.newFixedThreadPool(10);final  int PRECISION=100000;//定义各个引用变量/ 1000000000.0BigDecimal PI = null;//PIint i=0;   long startTime = System.currentTimeMillis();//开始时间System.out.println("计算机正在全力计算中...请稍候..."+startTime);while (true){if(System.currentTimeMillis()-startTime>180000) break;CountDownLatch countDownLatch=new CountDownLatch(10);for(int j=0;j<10;j++){MutiPi cur=new MutiPi(i++,countDownLatch);executorService.execute(cur);}try { System.out.println(tempt);countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("wcl");System.out.println(tempt);PI = tempt.divide(BigDecimal.valueOf(64));//PI=tempt/64long endTime = System.currentTimeMillis();//结束时间System.out.println(PI.toString());Lifegame.writeTxt(PI.toString());executorService.shutdown();}
}
public class MutiPi implements Runnable {int cur;final  int PRECISION=100000;CountDownLatch countDownLatch;Lock lock=new ReentrantLock();BigDecimal bigDecimal=BigDecimal.valueOf(0);public MutiPi(int cur, CountDownLatch countDownLatch) {this.cur = cur;this.countDownLatch=countDownLatch;}@Overridepublic void run() {BigDecimal a = null;//公式的第一项BigDecimal b = null;//公式的第二项BigDecimal c = null;//公式的第三项BigDecimal d = null;//公式的第四项BigDecimal e = null;//公式的第五项BigDecimal f = null;//公式的第六项BigDecimal g = null;//公式的第七项BigDecimal h = null;//公式的第八项//a=(-1/1024)^ia = BigDecimal.valueOf(-1).divide(BigDecimal.valueOf(1024),PRECISION, BigDecimal.ROUND_DOWN).pow(cur);//valueOf()方法,BigDecimal的静态方法,将 double 转换为 BigDecimal//pow()方法,BigDecimal类中的方法,原型BigDecimal pow(int n, MathContext mc);//返回其值为 (this^n) 的 BigDecimal//b=32/(4i+1)b = BigDecimal.valueOf(32).divide(BigDecimal.valueOf(4).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(1)),PRECISION, BigDecimal.ROUND_DOWN);//为求精确,计算精度比输出值多三位//ROUND_DOWN接近零的舍入模式(截取)//c=1/(4n+3)c = BigDecimal.valueOf(1).divide(BigDecimal.valueOf(4).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(3)),PRECISION, BigDecimal.ROUND_DOWN);//d=256/(10n+1)d = BigDecimal.valueOf(256).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(1)),PRECISION, BigDecimal.ROUND_DOWN);//e=64/(10n+3)e = BigDecimal.valueOf(64).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(3)),PRECISION, BigDecimal.ROUND_DOWN);//f=4/(10n+5)f = BigDecimal.valueOf(4).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(5)),PRECISION, BigDecimal.ROUND_DOWN);//g=4/(10n+7)g = BigDecimal.valueOf(4).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(7)),PRECISION, BigDecimal.ROUND_DOWN);//h=1/(10n+9)h = BigDecimal.valueOf(1).divide(BigDecimal.valueOf(10).multiply(BigDecimal.valueOf(cur)).add(BigDecimal.valueOf(9)),PRECISION, BigDecimal.ROUND_DOWN);CalculatePThread.add (a.multiply(d.add(h).subtract(b).subtract(c).subtract(e).subtract(f).subtract(g)));System.out.println("线程"+cur+"计算完成"+countDownLatch.getCount());countDownLatch.countDown();}
}

分布与并行计算—并行计算π(Java)相关推荐

  1. java分布性,大连培训java程序员(java分布性)

    大连培训java程序员,千里之行,始于足下,学习大连java培训就是我们行千里的足.想要行的足够远就得去深刻了解面向对象的Java语言,Java语言的稳健性,Java的工作原理,java分布性,Jav ...

  2. 云计算的基础架构:并行计算+资源虚拟化

    云计算的基础架构:并行计算+资源虚拟化 (2011-08-20 12:15:51) 标签: 校园 分类: 工作篇 高性能云计算:从科学应用的角度 科学计算往往需要可用的数量庞大的计算机来执行大规模实验 ...

  3. 浅谈多核CPU、多线程与并行计算

    浅谈多核CPU.多线程与并行计算 xiaofei0859 2017-05-09 17:07:11  3646  收藏 展开 0.前言 笔者用过MPI和C#线程池,参加过比赛,有所感受,将近一年来,对多 ...

  4. 云计算和并行计算的关系

    云计算是一种计算模式,代表了在某种程度上共享资源进行设计.开发.部署.运行应用,以及资源的可扩展收缩和对应用连续性的支持.目前大部 分的云计 算基础构架是由用户终端向数据中心传送可申请服务的网络,以及 ...

  5. 并行计算的一些思考与总结

    弗林分类法 根据弗林分类法,计算机结构主要分为 SIMD----单指令.多数据 MIMD---多指令.多数据 SISD----单指令.单数据 MISD---多指令.单数据 一般的串行程序中为SISD, ...

  6. 并行计算、分布式计算、网格计算、云计算区别和联系

    并行计算 - 并行计算是相对于串行计算,时间上并行即流水线技术,空间上并行即多个处理器同时计算,即解决单个处理器性能问题. 分布式计算 - 将复杂的问题分解成多个小任务分发到多台计算设备处理,最后再终 ...

  7. 串行计算、并行计算、分布式计算、网格计算与云计算

    并行计算 并行计算可以划分成时间并行和空间并行.时间并行即流水线技术,空间并行使用多个处理器执行并发计算,当前研究的主要是空间的并行问题. 并行计算是相对于串行计算来说的.要理解并行计算,首先需要了解 ...

  8. 并行计算与分布式处理的区别

    一.一些概念 1.1 物理处理器:      一个单核CPU,多核CPU的某个内核,都是一个物理处理器:   1.2 逻辑处理器:     通过超线程技术可以将一个物理处理器模拟成多个逻辑处理器,   ...

  9. Matlab 并行计算学习初步

    Matlab 并行计算学习 1. 简介 高性能计算(High Performance Computing,HPC)是计算机科学的一个分支,研究并行算法和开发相关软件,致力于开发高性能计算机.可见并行计 ...

最新文章

  1. JVM运行时数据区---堆(TLAB)
  2. 伪元素::before与::after的用法
  3. J2EE中修改了jsp页面或者html页面重新启动tomcat无效问题
  4. poj 2531(dfs)
  5. 计算机相关专业的自我评价,计算机相关专业的学生自我评价
  6. [转载] JAVA泛型杂谈--擦除,协变,逆变,通配符等
  7. python取模1e9+7_G题取1E9+7wa,取1E9+9等一些其他的值ac
  8. 安卓学习笔记25:常用控件 - 下拉列表
  9. BZOJ 1062 糖果雨
  10. 力扣-342 4的幂
  11. [转]iOS技巧之获取本机通讯录中的内容,解析通讯录源代码
  12. python const char_python C 扩展(转载)
  13. 如果Linux从未出现,我们的生活会变成怎样?
  14. LoadRunner Vuser测试脚本添加前置条件举例
  15. 小米路由器挂php,小米路由器mini 安装openWrt+更新源+挂载U盘+安装python
  16. Android接入TapTap踩坑
  17. delphi mysql 加密_Delphi纯代码连SQLite数据库,同时支持数据库的加密解密
  18. Mac电脑C盘空间不足怎么办?
  19. 利用油猴脚本显示扇贝网真实打卡日记
  20. __init__.py 文件用法

热门文章

  1. 【Verilog HDL】第四章 模块的端口连接规则——污水处理模型
  2. System V IPC之共享内存
  3. linux内核netfilter模块分析之:HOOKs点的注册及调用
  4. iOS https双向配置
  5. 2.x最终照着教程,成功使用OpenGL ES 绘制纹理贴图,添加了灰度图
  6. 使用 Arduino 和 LM35 温度传感器监测温度
  7. oracle表空间不足
  8. 基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)
  9. 一台机器同时运行两个Tomcat
  10. 中国涉5.9亿份简历信息泄露