• 并发测试 JavaDemo




    
    

    /**
    * @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. ", duration);
    return count * 500 / duration;
    }
    }
    
    
  • 相关阅读:
    11 数值的整数次方
    10 二进制中1的个数
    6 重建二叉树
    5 从尾到头打印链表
    计算机网络面试题
    Http和Https的区别
    UVALive 7749 Convex Contour (计算几何)
    Gym 101190H Hard Refactoring (模拟坑题)
    UVa 11324 The Largest Clique (强连通分量+DP)
    HDU 6006 Engineer Assignment (状压DP)
  • 原文地址:https://www.cnblogs.com/xmanblue/p/7448863.html
Copyright © 2020-2023  润新知