/**
* @author Jerry Lee
*/
public class Testee {
static long countTimeIn500ms = 0;
public static void main(String[] args) throws Exception {
countTimeIn500ms = guessCountTimeIn500ms();
Thread runAndSleepTask = new Thread(new RunAndSleepTask(), "RunAndSleepTask");
Thread runAndWaitTask = new Thread(new RunAndWaitTask(), "RunAndWaitTask");
Thread runAndLongSleepTask = new Thread(new RunAndLongSleepTask(), "RunAndLongSleepTask");
runAndSleepTask.start();
runAndWaitTask.start();
runAndLongSleepTask.start();
System.out.println("Tasks started!");
Thread.sleep(Long.MAX_VALUE);
}
public static class RunAndSleepTask implements Runnable {
@Override
public void run() {
String name = this.getClass().getSimpleName();
while (true) {
for (long i = 0; i < countTimeIn500ms; i++) {
}
System.out.println(name + ": " + new Date());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static class RunAndWaitTask implements Runnable {
@Override
public void run() {
String name = this.getClass().getSimpleName();
while (true) {
for (long i = 0; i < countTimeIn500ms; i++) {
}
try {
System.out.println(name + ": " + new Date());
synchronized (this) {
this.wait(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static class RunAndLongSleepTask implements Runnable {
@Override
public void run() {
String name = this.getClass().getSimpleName();
while (true) {
for (long i = 0; i < countTimeIn500ms; i++) {
}
System.out.println(name + ": " + new Date());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* @return 100ms可以做{@code long}的计数次数。
*/
static long guessCountTimeIn500ms() {
System.out.println("start guess.");
long count = 1000L * 1000 * 1000;
// simple warm-up
for (long i = 0; i < count; i++) {
// nothing!
}
long tick = System.currentTimeMillis();
for (long i = 0; i < count; i++) {
// nothing!
}
long duration = System.currentTimeMillis() - tick;
System.out.printf("1G times count take %d ms.\n", duration);
return count * 500 / duration;
}
}

并发测试 JavaDemo的更多相关文章

  1. Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现

    Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssq ...

  2. appium 并发测试

    Android并发测试 Appium提供了在一台设备上启动多个Android会话的方案,而这个方案需要你输入不同的指令来启动多个Appium服务来实现. 启动多个Android会话的重要指令包括: - ...

  3. Fiddler 接口测试(Composer)的使用方法及并发测试

    下载地址:https://www.telerik.com/download/fiddler 一.Composer简介 右侧Composer区域,是测试接口的界面: 相关说明: 1.请求方式:点开可以勾 ...

  4. spring boot2.0.4集成druid,用jmeter并发测试工具调用接口,druid查看监控的结果

    一.项目介绍(本项目用的编程语言是jdk8,项目源码:https://github.com/zhzhair/spring-boot-druid.git) 1.引入pom依赖: <dependen ...

  5. 使用postman进行并发测试

    1.打开postman软件 左侧栏点击+号键,创建一个并发测试文件夹 2.主面板点击+号键,输入一个测试地址,点击save按钮保存到并发测试文件夹 3.点击三角箭头,再点击Run,弹出Collecti ...

  6. Jmeter对HTTP请求压力测试、并发测试的简单使用方法

    对于服务器性能测试这块的经验更是少得可以忽略.迫使不得不让我们去尝试了解测试的知识. 首先我们的需求场景如下: 服务器硬件:(只有一台) 系统:Windows 2003 WebServer:Tomca ...

  7. 协议并发测试工具 BoHexTest

    BoHexTest V1.0.3 1.添加连接LOG打印2.优化代理及并发策略 大小: 1074688 字节修改时间: 2017年10月3日, 10:24:26MD5: EBAE5A17F7F5ED0 ...

  8. SoapUI 利用SoapUI进行简单的接口并发测试

    利用SoapUI进行简单的接口并发测试 by:授客 QQ:1033553122 测试环境: SoapUI Pro 5.1.2 步骤如下 1.   把请求添加到测试套件 1.1.     途径1 1.新 ...

  9. Java接口多线程并发测试 (一)

    本文为作者原创,禁止转载,违者必究法律责任!!! 本文为作者原创,禁止转载,违者必究法律责任!!! Java接口多线程并发测试 一,首先写一个接口post 请求代码: import org.apach ...

随机推荐

  1. HDU2717 Catch That Cow 【广搜】

    Catch That Cow Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  2. hdu 3308 LCIS(线段树区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3308 LCIS Time Limit: 6000/2000 MS (Java/Others)     ...

  3. Spring学习笔记一:基础概念

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6774310.html    一:Spring是什么 Spring的主要作用是作为对象的容器. 传统编程中,我们 ...

  4. 在Ubuntu上安装pyenv 相关问题Common build problems

    Requirements: Ubuntu/Debian: sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libb ...

  5. 【AIX】查看当前目录下文件与文件夹大小

    使用命令: du –sg ./*    #以G为单位 du –sm ./*    #以M为单位 du –sk ./*    #以k为单位

  6. V-rep学习笔记:Reflexxes Motion Library 3

    路径规划 VS 轨迹规划 轨迹规划的目的是将输入的简单任务描述变为详细的运动轨迹描述.注意轨迹和路径的区别:Trajectory refers to a time history of positio ...

  7. python之函数用法get()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法get() #http://www.runoob.com/python/att-dic ...

  8. iscsi共享分区测试

    要求:在服务器端Server0上创建一个分区/dev/sdb1(无需格式化),配置成iscsi target设备,块设备名称为sun1,iqn名称为iqn.2018-01.com.ultrapower ...

  9. 转:Linux网卡驱动程序编写

    Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...

  10. Paint的基本使用

    代码地址如下:http://www.demodashi.com/demo/14712.html 前言 在讲述自定义控件的时候,我们讲到了自定义控件的基本步骤,那么在自定义控件中,我们第一个需要了解的就 ...