java 多线程并行计算之求素数(星星笔记)
2014-09-15 20:57
330 查看
使用Runnable接口实现求素数的java多线程并行程序如下(并行2个线程):
相对加速比: 19541/10390=1.880750721847941
package com.xing.prime; /** * * @author Yinxing * */ public class ParallelPrime { public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub long leng = 10000000; long startTime,endTime; Prime primeone = new Prime(1,leng); Prime primetwo = new Prime(3, leng); Thread threadone = new Thread(primeone); Thread threadtwo = new Thread(primetwo); //-------------------并行计算-------------------- startTime = System.currentTimeMillis(); threadone.start(); threadtwo.start(); threadone.join(); threadtwo.join(); endTime = System.currentTimeMillis(); System.out.println("并行结果 = " + (primeone.getSum() + primetwo.getSum())); System.out.println("并行时间 = " + (endTime - startTime)); //-------------------串行计算-------------------- startTime = System.currentTimeMillis(); Prime primethree = new Prime( 3, leng); primethree.serial(); endTime = System.currentTimeMillis(); System.out.println("串行结果 = " + primethree.getSum()); System.out.println("串行时间 = " + (endTime - startTime)); } } class Prime implements Runnable{ private long start ; private long end ; private int sum = 0; public Prime(long st,long en){ this.start = st; this.end = en; } @Override public void run() { // TODO Auto-generated method stub long i,j,k; for( i = start; i <= end; i += 4) { k = (long) Math.sqrt(i); for(j=2; j<=k; j++) if(i%j == 0) break; if(j>k) { //System.out.println(i); sum ++ ; //并行计算的素数个数包含 1 (1 不是素数,但是并行漏了一个 2) } } } public void serial() { //串行计算一个 long i,j,k; for( i= 3 ; i <= end; i += 2 ) { k = (long) Math.sqrt(i); for(j=2; j<=k; j++) if(i%j == 0) break; if(j>k) { // System.out.println(i); sum ++ ; } } sum ++ ; //加上一个素数---2---- } public int getSum() { return this.sum; } }运行结果:
相对加速比: 19541/10390=1.880750721847941
相关文章推荐
- java 多线程并行计算之矩阵乘法继承Thread类实现(星星笔记)
- java 多线程并行计算之矩阵乘法(星星笔记)
- java多线程计算素数
- 并行计算----5种方式实现判断是不是素数.Net,Win32,JavaRunnable,OpenMp,JavaThread
- 并行计算----5种方式实现判断是不是素数.Net,Win32,JavaRunnable,OpenMp,JavaThread
- 完数的Java多线程并行程序设计-并行计算
- 浅谈.NET下的多线程和并行计算(十二)CLR via C#第三版阅读笔记(1)
- JAVA多线程并行计算乐观锁之Atomic系列详解
- Java基础知识强化之多线程笔记04:并行和并发 区别
- 【并行计算作业】java多线程技术求1000000以内的素数
- 浅谈.NET下的多线程和并行计算(十三)CLR via C#第三版阅读笔记(2)
- JAVA学习笔记之多线程
- Java学习笔记(五、多线程)
- 浅谈.NET下的多线程和并行计算(二)线程基本知识
- 浅谈.NET下的多线程和并行计算(九)Winform中多线程编程基础下
- 浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础上
- 浅谈.NET下的多线程和并行计算(六)线程池基础下 (转)
- .NET 4.0并行计算学习笔记
- 浅谈.NET下的多线程和并行计算(一)前言 (转)
- 浅谈.NET下的多线程和并行计算(六)线程池基础下