import java.util.concurrent.CountDownLatch;
public class Test {
public static void main(String[] args) {
int num = 100000;
test1(num);
test2(num);
}
private static void test1(int max) {
long t1 = System.currentTimeMillis();
int n = method1(max);
long t2 = System.currentTimeMillis();
System.out.println("method1: value=" + n + ",time=" + (t2 - t1)
/ 1000.0);
}
private static int method1(int max) {
int num = 0;
for (int i = 1; i <= max; i++) {
boolean flag = true;
for (int j = 2; j < i - 1; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag && i > num)
num = i;
}
return num;
}
private static int method2(int max) {
int num = 0;
for (int i = 1; i <= max; i++) {
boolean flag = true;
for (int j = 2; j < i - 1; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag && i > num)
num = i;
}
return num;
}
private static void test2(int max) {
long t1 = System.currentTimeMillis();
int threadNumber = 20;//线程数,在我的机器上20个线程效果最佳
final CountDownLatch countDownLatch = new CountDownLatch(threadNumber);
int step = max / threadNumber;
for (int i = 0; i <= max; i += step) {
if (i - step >= 0) {
Calc calc = new Calc(i - step + 1, i, countDownLatch);
Thread thread = new Thread(calc);
thread.start();
}
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
long t2 = System.currentTimeMillis();
System.out.println("method2: value=" + Calc.getVal() + ",time="
+ (t2 - t1) / 1000.0);
}
}
class Calc implements Runnable {
private static Integer val = 0;
private int min;
private int max;
private CountDownLatch cdl;
public Calc(int min, int max, CountDownLatch cdl) {
this.min = min;
this.max = max;
this.cdl = cdl;
}
public static int getVal() {
return val;
}
public void run() {
int num = 0;
for (int i = min; i <= max; i++) {
boolean flag = true;
for (int j = 2; j < i - 1; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
if (flag && i > num)
num = i;
}
synchronized (val) {
if (num > val)
val = num;
}
cdl.countDown();
}
}
在我的机器上测试效果如下:
50线程
method1: value=99991,time=7.797
method2: value=99991,time=3.672
30线程
method1: value=99991,time=7.813
method2: value=99989,time=3.797
20线程
method1: value=99991,time=7.782
method2: value=99991,time=3.797
10线程
method1: value=99991,time=7.719
method2: value=99991,time=4.109
不难看出,当计算量较大时候,多线程程序可以比普通程序快80%
分享到:
相关推荐
java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发...
刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...
本毕业设计题目旨在研究和实现一个基于Java多线程与线程安全机制的断点续传下载工具。随着互联网的普及,文件的下载需求日益增加,而大文件的下载往往需要较长的时间,一旦出现网络中断或意外情况,就需要从头开始...
发布于2013-5-13随着信息系统的结构的日益复杂和规模的不断扩大,交易中间件在复杂系统的应用也越来越广。交易中间件作为一个中间层的系统,在接收客户端请求时,...本文首先会简单的介绍交易中间件及Java多线程编程的
这个是一个java开发的多线程高并发实例,一个真正实现并发队列接收,多线程处理的程序,完整实例,可以使用JMETER性能测试工具测试
模块三,多线程性能调优。 模块四,JVM 性能监测及调优。 模块五,设计模式调优。 模块六,数据库性能调优。 模块七,实战演练场。 性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化...
JProbe在简单易用的集成化套件中,为servlet、JSP和EJB应用代码提供了强大的Java性能分析、内存纠错、代码覆盖及线程分析功能。 JProbe Profiler JProbe Profiler * JProbe Profiler JProbe Profiler内置了Call ...
近在项目里面使用了多线程处理技术,感觉对数据很多批量处理效果蛮好,所以在这里记录下来,给自己一个日子,也分享给大家!... 有些高手做了一些性能方面的测试,表示当核数叫多的时候,处理性能提升很好,
从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的...
综合了文件读写、多线程技术、以进度条的形式显示排序的完成情况(当测试数据很多时)、随机生成排序数等。 用户界面: 有“输入数据”、“从文件读入数据”、“设置随机产生数据的个数”和选择排序算法等功能。
Java基础、Java语法、Java集合框架、Java泛型、Java异常处理、Java多线程、Java网络编程、Java数据库编程、Java反射机制、Java设计模式、Java Spring框架、Java Spring Boot、Java MyBatis框架、Java Hibernate框架...
在项目中,Spring框架提供了依赖注入和面向切面编程的功能,可以提高代码的可维护性和可测试性。SpringMVC负责处理请求和响应,可以实现灵活的URL映射和请求处理。MyBatis或Hibernate可以简化数据库操作,提供了方便...
java -jar ThreadIOReadWriteTest.jar iowrite 4096 D:/1.txt C:/2.txt Usage: ThreadIOReadWriteTest ioread/iowrite 4096 dest1/source1 dest2/source2 ... java -jar ThreadIOReadWriteTest.jar iowrite 4096 /...
4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。 5.精心的GUI设计允许快速操作和更精确的计时。 6.缓存和离线分析/回放测试结果。 JMeter的高可扩展性 1.可链接的取样器允许...
避免使用Java序列化14讲多线程之锁优化(下):使用乐观锁优化并行操作16讲多线程调优(下):如何优化多线程上下文切换17讲并发容器的使用:识别不同场景下最优容器21讲深入JVM即时编译器JIT,优化Java编译25讲答疑...
此代码,经过1000数量级的多线程并发访问测试。在四核CPU下也进行了多线程测试。保证了连接池在真多线程上同步访问的安全性。 里面包含了一个公开的接口。使用这个接口里面的函数。可以轻易创建使用数据库连接池...
设计采用多线程技术,开启多个线程同时处理多个用户的下载请求,提高系统的并发处理能力和吞吐量。同时采用线程安全技术,通过锁的使用避免多个线程同时修改同一资源,保证数据的一致性和准确性。 具体实现中,设计了...
465页,涵盖Java编程性能调优,Java多线程性能调优,JVM性能检测及调优,设计模式调优,数据库性能调优,实战演、还有其他豆瓣高评分的Java相关书籍:深入理解Java虚拟机、凤凰架构:构建可靠的大型分布式系统、谷歌...
实时数据库 包括jar包 源码 测试的小例子 多线程 性能测试代码