单线程和多线程在pc上执行花费时间测试

  1 package Thread;
  2
  3 import junit.framework.Assert;
  4 import org.junit.Test;
  5
  6 import java.util.concurrent.CountDownLatch;
  7 import java.util.concurrent.Executor;
  8 import java.util.concurrent.Executors;
  9
 10 /**
 11  * Created by csophys on 15/7/11.
 12  *
 13  * @author csophys
 14  */
 15 public class SingleThreadAndThreadPoolExecuteCompare {
 16
 17     @Test
 18     public void TestSimpleTask() {
 19         long 简单任务 = 10000000l;
 20         //普通计算方式
 21         long start = System.currentTimeMillis();
 22         单线程计算方式(简单任务);
 23         long end = System.currentTimeMillis();
 24         long 单线程计算花费时长 = end - start;
 25
 26         //多线程计算方式
 27         start = System.currentTimeMillis();
 28         int 多线程数目 = 10;
 29         多线程计算方式(简单任务, 多线程数目);
 30         end = System.currentTimeMillis();
 31         long 多线程计算花费时长 = end - start;
 32
 33         System.out.println("多线程计算花费时长(ms):" + 多线程计算花费时长);
 34         System.out.println("单线程计算花费时长(ms):" + 单线程计算花费时长);
 35         Assert.assertTrue(多线程计算花费时长 > 单线程计算花费时长);
 36     }
 37
 38     @Test
 39     public void TestComplexTask(){
 40         long 复杂任务 = 1000000000l;
 41         //普通计算方式
 42         long start = System.currentTimeMillis();
 43         单线程计算方式(复杂任务);
 44         long end = System.currentTimeMillis();
 45         long 单线程计算花费时长 = end - start;
 46
 47         //多线程计算方式
 48         start = System.currentTimeMillis();
 49         int 多线程数目 = 10;
 50         多线程计算方式(复杂任务, 多线程数目);
 51         end = System.currentTimeMillis();
 52         long 多线程计算花费时长 = end - start;
 53
 54         System.out.println("多线程计算花费时长(ms):" + 多线程计算花费时长);
 55         System.out.println("单线程计算花费时长(ms):" + 单线程计算花费时长);
 56         Assert.assertTrue(多线程计算花费时长 < 单线程计算花费时长);
 57
 58     }
 59
 60     //如果同时运行的线程比较多,那线程执行一个具体任务t所化的时间会比用单一线程执行任务t所化的时间多很多
 61
 62     private void 多线程计算方式(long targetValue, int segmentNum) {
 63         Executor executor = Executors.newFixedThreadPool(segmentNum);
 64         CountDownLatch countDownLatch = new CountDownLatch(segmentNum);
 65         for (int i = 0; i < segmentNum; i++) {
 66             executor.execute(new Task(countDownLatch, targetValue / segmentNum));
 67         }
 68         try {
 69             countDownLatch.await();
 70         } catch (InterruptedException e) {
 71             e.printStackTrace();
 72         }
 73
 74     }
 75
 76     private void 单线程计算方式(long targetValue) {
 77         doComputer(targetValue);
 78     }
 79
 80     public static void doComputer(long targetValue) {
 81
 82         System.out.println(Thread.currentThread() + "开始计算,targetValue=" + targetValue);
 83         long start = System.currentTimeMillis();
 84         while (targetValue > 0) {
 85             targetValue--;
 86         }
 87         System.out.println(Thread.currentThread() + "计算完成,花费时长(ms)=" + (System.currentTimeMillis() - start));
 88
 89     }
 90
 91
 92
 93     private class Task implements Runnable {
 94         CountDownLatch countDownLatch;
 95         long targetValue;
 96
 97         public Task(CountDownLatch countDownLatch, long targeValue) {
 98             this.countDownLatch = countDownLatch;
 99             this.targetValue = targeValue;
100         }
101
102         public void run() {
103             doComputer(targetValue);
104             countDownLatch.countDown();
105         }
106     }
107 }
时间: 2024-08-02 10:59:21

单线程和多线程在pc上执行花费时间测试的相关文章

python多进程并行执行和顺序执行的时间测试

#_*_coding:utf-8_*_ import time from  multiprocessing import Pool from threading import Thread def func1(fn):     time.sleep(1)     return fn * fn if __name__ == "__main__":     a = [1,2,3,4,5,6]     print "顺序执行的方式开始..."     s = time.t

Android--通过Monkey在手机上执行pc上的脚本文件

Monkey相对比较简单,之前我也写过一篇文章介绍发送指令对指定的app做自动化压力测 试. 那么如果我们不想一条条的发送指令,想批量的执行成千上万自己写的脚本怎么办呢? 下面给大家介绍一下执行pc上写好的脚本文件方法: 先把脚本写好,放到一个路径下面 我这里是随意些的一些脚本,根据自己的需求写自己的脚本即可. 用adb指令验证安卓设备是否已经连接成功 如果结果为空,或者是offline那需要重新拔插设备或者把5037端口的进程kill掉,然 后再连接设备. 确认连接上设备后,我们上传文件到手机

单线程和多线程执行对比—Python多线程编程

单线程和多线程执行对比 本章使用递归求斐波那契.阶乘与累加函数的执行来对比单线程与多线程: 斐波那契.阶乘与累加(mtfacfib.py): ? 1 import threading 2 from time import sleep, ctime 3 ? 4 class MyThread(threading.Thread): 5 def __init__(self, func, args, name=''): 6 threading.Thread.__init__(self) 7 self.na

单线程和多线程的优缺点(转)

多线程处理的优点 同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低.如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应.多线程处理可以同时运行多个过程.例如,文字处理器应用程序在您处理文档的同时,可以检查拼写(作为单独的任务).由于多线程应用程序将程序划分成独立的任务,因此可以在以下方面显著提高性能: 多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态. 当前没有进行处理的任务可以将处理器时间让

Operating System-Thread(5)弹出式线程&amp;&amp;使单线程代码多线程化会产生那些问题

本文主要内容 弹出式线程(Pop-up threads) 使单线程代码多线程化会产生那些问题 一.弹出式线程(Pop-up threads) 以在一个http到达之后一个Service的处理为例子来介绍弹出式线程. 上面的例子中传统的做法有可能是在Service中有一个线程一直在等待request的到达,等request到达后这个线程会开始检查请求最后在进行处理.当这个线程在处理request的时候,后面来的request会被block,一直到线程处理完当前request为止.如下图所示. 弹出

sevlet是单线程还是多线程,在多线程下如何编写安全的servlet程序

sevlet是单线程还是多线程,在多线程下如何编写安全的servlet程序 首先明确:Servlet是单实例的,即对于同一种业务请求只有一个是实例.不同的业务请求可以通过分发来产生多个实例.其次:单实例的原因我想是因为单实例足可以处理某一个请求,就像ibatis的Querydao.UpdateDao一样都是单实例的.再次:为什么单实例足可以处理某一个请求,因为Servlet是单实例多线程的.http://hiyachen.cublog.cn  [email protected]先看一段代码:pa

java归并排序,单线程vs多线程

一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子数组递归排序,然后把这两个排好序的子数组合并为一个有序数组.下面是归并排序的例子图解: 二.单线程实现归并排序 package com.bob.algorithms.sort; import java.util.Arrays; import com.bob.algorithms.SortStrate

Spring Boot 定时任务单线程和多线程

Spring Boot 的定时任务: 第一种:把参数配置到.properties文件中: 代码: package com.accord.task; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /** * 从配置

JavaScript是单线程还是多线程(转)

多线程要考虑线程之间的资源抢占,死锁,冲突之类一系列问题.JavaScript作为一门客户端脚本,貌似没有多线程的一些列问题.那么JavaScript是单线程还是多线程?通过查资料总结了JavaScript运行的原理.如下: 一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. JavaScript的单线程,与它的用途有关.作为浏览器脚本语言,JavaScri