`
kong0itey
  • 浏览: 299766 次
社区版块
存档分类
最新评论

JAVA多线程性能测试

    博客分类:
  • java
阅读更多
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 多线程同步

    java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发...

    Java 利用多线程实现文件的分片下载

    刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...

    Java多线程与线程安全实践-基于Http协议的断点续传(源码)

    本毕业设计题目旨在研究和实现一个基于Java多线程与线程安全机制的断点续传下载工具。随着互联网的普及,文件的下载需求日益增加,而大文件的下载往往需要较长的时间,一旦出现网络中断或意外情况,就需要从头开始...

    Java多线程在交易中间件测试中的应用

    发布于2013-5-13随着信息系统的结构的日益复杂和规模的不断扩大,交易中间件在复杂系统的应用也越来越广。交易中间件作为一个中间层的系统,在接收客户端请求时,...本文首先会简单的介绍交易中间件及Java多线程编程的

    高并发多线程处理demo-java.rar

    这个是一个java开发的多线程高并发实例,一个真正实现并发队列接收,多线程处理的程序,完整实例,可以使用JMETER性能测试工具测试

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    模块三,多线程性能调优。 模块四,JVM 性能监测及调优。 模块五,设计模式调优。 模块六,数据库性能调优。 模块七,实战演练场。 性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化...

    JAVA性能瓶颈和漏洞检测

    JProbe在简单易用的集成化套件中,为servlet、JSP和EJB应用代码提供了强大的Java性能分析、内存纠错、代码覆盖及线程分析功能。 JProbe Profiler JProbe Profiler * JProbe Profiler JProbe Profiler内置了Call ...

    Java多线程的使用

    近在项目里面使用了多线程处理技术,感觉对数据很多批量处理效果蛮好,所以在这里记录下来,给自己一个日子,也分享给大家!...  有些高手做了一些性能方面的测试,表示当核数叫多的时候,处理性能提升很好,

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的...

    java排序性能测试图形化(进度条)

    综合了文件读写、多线程技术、以进度条的形式显示排序的完成情况(当测试数据很多时)、随机生成排序数等。 用户界面: 有“输入数据”、“从文件读入数据”、“设置随机产生数据的个数”和选择排序算法等功能。

    人力资源-面试-java

    Java基础、Java语法、Java集合框架、Java泛型、Java异常处理、Java多线程、Java网络编程、Java数据库编程、Java反射机制、Java设计模式、Java Spring框架、Java Spring Boot、Java MyBatis框架、Java Hibernate框架...

    JAVA多线程与线程安全实践-基于Http协议的断点续传.zip

    在项目中,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 /...

    jmeter 测试工具 使用java自测 并发测试 环境测试 压力测试

    4.完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。 5.精心的GUI设计允许快速操作和更精确的计时。 6.缓存和离线分析/回放测试结果。 JMeter的高可扩展性 1.可链接的取样器允许...

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    避免使用Java序列化14讲多线程之锁优化(下):使用乐观锁优化并行操作16讲多线程调优(下):如何优化多线程上下文切换17讲并发容器的使用:识别不同场景下最优容器21讲深入JVM即时编译器JIT,优化Java编译25讲答疑...

    java高性能数据库连接池V5.0

    此代码,经过1000数量级的多线程并发访问测试。在四核CPU下也进行了多线程测试。保证了连接池在真多线程上同步访问的安全性。 里面包含了一个公开的接口。使用这个接口里面的函数。可以轻易创建使用数据库连接池...

    基于Java多线程与线程安安全实践-基于Http协议的断点续传的毕业设计,通过分析用户的网络环境和网络状况,确定合适的分包大小

    设计采用多线程技术,开启多个线程同时处理多个用户的下载请求,提高系统的并发处理能力和吞吐量。同时采用线程安全技术,通过锁的使用避免多个线程同时修改同一资源,保证数据的一致性和准确性。 具体实现中,设计了...

    java稳定可靠的分布式-高并发性能调优

    465页,涵盖Java编程性能调优,Java多线程性能调优,JVM性能检测及调优,设计模式调优,数据库性能调优,实战演、还有其他豆瓣高评分的Java相关书籍:深入理解Java虚拟机、凤凰架构:构建可靠的大型分布式系统、谷歌...

    CoolHash实时数据库性能研究

    实时数据库 包括jar包 源码 测试的小例子 多线程 性能测试代码

Global site tag (gtag.js) - Google Analytics