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多线程测试工具,如JMeter,是进行系统性能测试和优化的得力助手。它能够帮助我们理解系统在高并发环境下的表现,定位性能瓶颈,以及指导优化策略的制定。熟练掌握JMeter等工具的使用,对于提升系统的...
在Java编程领域,多线程是一项至关重要的技术,它允许程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度...通过深入学习这份资料,开发者可以全面掌握Java多线程编程技术,提升程序的并发性能和稳定性。
最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...
Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,提高了系统的效率和响应性。在Java中,多线程的实现主要通过两种方式:继承Thread类和实现Runnable接口。理解并掌握多线程的使用对于任何Java开发者...
Java多线程是Java编程中的核心概念,尤其对于高级开发者来说,掌握多线程的深入理解和应用至关重要。这本书“java多线程进阶”显然旨在帮助读者深化这方面的理解,打通编程中的“任督二脉”,使开发者能够更加熟练地...
Java多线程编程是提升程序性能和响应性的关键技术。理解多线程的概念,掌握线程的创建、同步、通信、死锁避免等核心知识点,以及合理使用线程池,对于编写高效、稳定的并发程序至关重要。通过实践,开发者可以更好地...
Java多线程端口扫描是网络管理与安全领域中常用的一种技术,主要用于检测网络设备上哪些端口处于开放状态,从而分析网络的安全性或者优化网络配置。本程序通过利用Java的多线程特性,提高了扫描速度,使得在短时间内...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在本教程中,我们将深入探讨Java中的多线程设计模式、并发核心编程概念以及线程池的工作原理和种类。 首先,让我们了解什么...
本资源主要探讨了如何在JAVA和C++中实现多线程,以及相关的测试和调试技术。 在JAVA中,多线程的实现主要依赖于`Thread`类和`Runnable`接口。开发者可以通过直接继承`Thread`类或实现`Runnable`接口来创建新的线程...
Java多线程文件传输是Java编程中一个重要的实践领域,特别是在大数据处理、网络通信和分布式系统中。在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨...
**JAVA多线程端口扫描器** 在计算机网络中,端口扫描是一种常见的技术,用于检测目标主机上开放的服务和应用程序。此项目是基于Java语言实现的多线程端口扫描器,它允许用户对本地系统或指定的远程IP地址进行快速...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...
由于文档中的部分内容是关于如何在多核多线程环境下提升Java设计模式性能的探讨,以下是针对文档内容的知识点分析: 标题和描述中提到的“多核多线程下java设计模式性能提升.pdf”,说明文章旨在讨论在现代大型系统...
Java多线程聊天程序是一种利用Java编程语言实现的并发通信应用,它允许多个用户在同一时间进行交互式的对话。在这个程序中,多线程技术被用来处理并发用户输入和消息传递,确保系统的高效运行和响应性。下面将详细...
总之,Java多线程技术是开发高并发应用程序的基础,熟练掌握线程的创建、同步、通信以及并发工具的使用,对于提升程序性能和解决复杂问题具有重要意义。这个"java多线程小汽车运行程序"为学习和实践这些概念提供了一...
这个压缩包中的文件提供了几个关于Java多线程交互的实例,可以帮助我们深入理解如何在并发环境中控制线程的同步,确保数据的一致性和安全性。 首先,让我们讨论一下标题和描述中提到的关键概念——“多线程交互”和...
Java多线程是Java编程中的核心概念,尤其在开发高并发、高性能的应用程序时不可或缺。本书籍《JAVA多线程教材》显然会深入探讨这一主题,帮助开发者掌握如何有效地利用多核处理器,提高程序的执行效率。PDF格式的...
### Java多线程断点下载文件:关键技术与实现 在当今高速互联网环境下,高效的数据传输技术变得至关重要。Java多线程断点续传文件下载技术就是一种能够显著提高下载速度和稳定性的方法。本文将深入解析Java多线程...
9. **测试与调试**:多线程问题往往难以复现,因此在编写生产者-消费者代码时,应编写充分的测试用例,包括边界情况,如缓冲区满和空的状态转换。 通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者...