Java多线程—Thread统计素数的个数
来源:互联网 发布:淘宝天猫自动回复设置 编辑:程序博客网 时间:2024/04/29 22:37
import java.math.*; public class bb extends Thread{public long start;public long end;public long num=0;public bb(long start,long end){super();this.start=start;this.end=end;}//判断是否为素数long isPrime(long lyy_num) {long lyy_flag=1;long lyy_s=(int)Math.sqrt(lyy_num);for(long j=2;j<=lyy_s;j++) { if(lyy_num%j==0) { lyy_flag=0; break; } }return lyy_flag;}//串行算法public long num(){for(long i=start;i<=end;i+=2)num+=isPrime(i);return num+1;}//实现run()public void run(){for(long i=start;i<=end;i+=4){num=num+isPrime(i);}}//得到线程的最终结果public long getNum(){return num;}}public class aa {public static void main(String[] args) throws Exception{bb t1=new bb(1,1000000); //判断1、5、9、13... bb t2=new bb(3,1000000); //判断3、7、11、15... long startTime=System.currentTimeMillis(); t1.start(); t2.start(); t1.join(); t2.join(); long endTime=System.currentTimeMillis(); System.out.println("并行结果="+(t1.getNum()+t2.getNum())); System.out.println("并行时间="+(endTime-startTime)); startTime=System.currentTimeMillis(); bb serial=new bb(3,1000000); long num=serial.num(); //判断3开始之后的数,最后加上2这一个素数 endTime=System.currentTimeMillis(); System.out.println("串行结果="+num); System.out.println("串行时间="+(endTime-startTime)); }}
运行结果:
计算:
实验加速比为:858/437=1.963
总结:
将线程分为奇数和偶数时,由于偶数判断是否素数时,很快就得出结果。因此,线程之间存在负载均衡,导致实验加速比很不理想。
0 0
- Java多线程—Thread统计素数的个数
- Java多线程—Thread统计完数的个数
- 素数的个数统计
- (java)统计小于N的数中素数的个数
- MPI—统计素数个数
- 并行计算—OpenMP—统计素数的个数
- wikioi1439统计素数个数
- 统计素数个数
- 1439 统计素数个数
- 100到200之间的素数并统计个数
- NowCoder猜想---统计n以内的素数个数
- 循环三 统计给定区间内素数的个数
- Java多线程——Thread
- JAVA——多线程Thread
- java—多线程编程 Thread
- 统计一个子字符串的个数 Java
- 用java实现英文字母个数的统计
- java统计字符串单词的个数
- 检测HTML5等特性
- 屠龙刀还是倚天剑?——需求分析与管理高端峰会
- 第九周-ASCII码排序
- 一个小判卷系统
- ios10 相册权限访问
- Java多线程—Thread统计素数的个数
- 网络中常用的队列管理方法比较
- 深度学习框架Caffe学习笔记(3)-MNIST例程深入
- faster rcnn 改最后一层名字,方框混乱
- js数组操作的常用方法
- Transform
- Service
- 第九周-等比数列
- 第九周-大帆玩英雄联盟