精华内容
下载资源
问答
  • JAVA计算线程执行时间

    千次阅读 2018-03-08 16:42:21
    代码: ExecutorService exec = Executors.newCachedThreadPool(); long start = System.nanoTime(); ...System.out.println( ...直到所有线程执行结束或者到了一个小时(我的参数),才能计算时间。从而达到目的。

    代码:

    ExecutorService exec = Executors.newCachedThreadPool();
    long start = System.nanoTime();
    
    System.out.println("kaishi");
    for (int i = 0; i < 3; i++){
        exec.execute(new SlsPredictor(args) );
    }
    exec.shutdown();
    exec.awaitTermination(1, TimeUnit.HOURS); // 或者更长时间(这行代码是关键)  
    long time = System.nanoTime() - start;
    System.out.printf("Tasks took %.3f ms to run%n", time/1e6);

    分析:
    最关键的代码是:exec.awaitTermination(1, TimeUnit.HOURS);
    awaitTermination()函数的源码是:

    /**
     * Blocks until all tasks have completed execution after a shutdown
      * request, or the timeout occurs, or the current thread is
      * interrupted, whichever happens first.
      *
      * @param timeout the maximum time to wait
      * @param unit the time unit of the timeout argument
      * @return <tt>true</tt> if this executor terminated and
      *         <tt>false</tt> if the timeout elapsed before termination
      * @throws InterruptedException if interrupted while waiting
      */
     boolean awaitTermination(long timeout, TimeUnit unit)
         throws InterruptedException;
    

    从注释可以知道:该函数所在线程会陷入阻塞,直到shutdown请求发出导致所有线程都结束、或者时间超时、或者当前线程被中断,这三个条件只要发生一个,线程就会跳出阻塞状态。
    加上了这行,main线程就会阻塞,后面计算执行时间的代码无法执行。直到所有线程执行结束或者到了一个小时(我的参数),才能计算时间。从而达到目的。

    展开全文
  • Java计算线程运行时间的简单方式

    千次阅读 2020-01-14 09:02:46
    final long start = System.nanoTime(); t1.start(); t2.start(); t1.join(); t2.join(); long end = System.nanoTime(); long 耗时 = end-start;
    final long start = System.nanoTime();
    t1.start();
    t2.start();
    t1.join();
    t2.join();
    long end = System.nanoTime();
    long 耗时 = end-start;

     

    展开全文
  • 最近有个功能要查看所有线程运行时间,走了一些弯路,在此总结一下。 1.获取所有线程的CPU执行时间 这里需要用到 java.lang.management.ThreadMXBean;

    最近有个功能要查看所有线程的运行时间,走了一些弯路,在此总结一下。

    1.获取所有线程的CPU执行时间

    这里需要用到ThreadMXBean 类,通过getAllThreadIds获取所有线程的ID:

    ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();
    tmbean.setThreadContentionMonitoringEnabled(true);
    long[] allThread = tmbean.getAllThreadIds();

     获取到id数组之后,遍历线程id,通过getThreadCpuTime(long id)等获取线时间,具体的相关时间方法如下:

     2.获取等待、阻塞时间等

    这里需要用到ThreadMXBean 的getThreadInfo(long id)方法

    ThreadInfo info = tmbean.getThreadInfo(threadId);

    具体的info方法如下:

     

     示例代码如下:

    ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();
    tmbean.setThreadContentionMonitoringEnabled(true);
    long[] allThread = tmbean.getAllThreadIds();
    if (allThread.length > 0) {
        for (long threadId : allThread) {
            ThreadInfo info = tmbean.getThreadInfo(threadId);
            Long userTime = info.getWaitedTime();
            log.info("ThreadId:" + info.getThreadId() + "ThreadName:" + info.getThreadName() + "ThreadState:" + info.getThreadState() + "userTime:" + userTime.toString());
            }
        }
    }
    展开全文
  • JAVA计算线程耗时

    千次阅读 2018-05-30 19:06:59
    java开发中,多线程是非常常用的技术,如何计算一个新的线程,从START到TERMINATED , 即从线程的启动到终止一整个过程所消耗的时间,本文提供了一种算法。 首先,像给普通方法计算执行方法一样,在主线程中计算时间...

     java开发中,多线程是非常常用的技术,如何计算一个新的线程,从STARTTERMINATED , 即从线程的启动到终止一整个过程所消耗的时间,本文提供了一种算法。

        首先,像给普通方法计算执行方法一样,在主线程中计算时间是绝对不行的。主线程启动完新线程之后,就继续往下执行,而不会等待新线程的执行,这也是多线程的意义,不多解释。下面是反例。

    long startTime = System.currentTimeMillis();
    new Thread(d5::m1).start();
    long endTime = System.currentTimeMillis();
    endTime - startTime;

        所以在线程内部,即计算run()方法的执行时间,去计算耗时,是可行的。但计算多个线程执行时间,求和时,会出现新的问题,依旧是线程同步问题。使用atomic类完成。

    new Thread(()->
            {
                long startTime = System.currentTimeMillis();
                ...
                long endTime = System.currentTimeMillis();
                System.out.println(Thread.currentThread().getName() + "线程总耗时"+ (endTime - startTime));
            },"t1").start();


    展开全文
  • 办法是使用java.util.concurrent包下的计数器工具类CountDownLatch,看demo,本demo巧妙的使用了CountDownLatch让多线程模拟高并发以及所有线程执行完之后的耗时。 private static Date startDate; private ...
  • 但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据
  • java 等待所有线程执行完毕

    千次阅读 2017-01-22 16:34:55
    问题的由来主线程等待所有线程运行完后,再执行逻辑,这个需求很普遍。比如,在处理数据时,为了效率期间,起了10个线程,分别处理一块数据,这样能缩短处理时间,10个线程执行完后,继续进行下边的逻辑(有点...
  • Java线程池: 等待所有线程执行完成

    千次阅读 2020-12-25 15:40:08
    需要获取多个结果, 并进行运算, 想通过线程池增加结果获取速度, 且所有结果获取后, 可以继续计算并统一返回。 依赖 <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> ...
  • Java线程并行计算

    千次阅读 2020-04-19 17:26:47
    在实际业务开发中如何降低接口响应时间,即如何提高程序的并行计算能力。 本文主要包含如下内容: 1、顺序执行 2、线程池+Future 3、使用Java8的CompletableFuture 4、使用Guava的ListenableFuture 1、顺序执行 直接...
  • 问题最近我在处理一批数据,用多线程来处理,我想知道大概多久能处理完。比如我先用多线程处理 100 条数据,统计下用时,...开始计时锁在子线程任务开始时通过 await() 阻塞所有线程,然后在主线程中通过 CountDownL
  • 使用多线程就是在正确的场景下通过设置正确个数的线程来最大化程序的运行速度 将这句话翻译到硬件级别就是要充分的利用 CPU 和 I/O 的利用率 场景 + 线程个数 = 运行速度 场景分为 : CPU 密集型程序 I/O 密集型...
  • // 日前工作遇到一个需求,就是把硬盘的文件(大量文件)全部读取出来,然后全部解析生成文件保存到硬盘需要多线程处理,并要计算全部执行结束后的耗时。以下是实现方法. // 创建线程池 ExecutorService ...
  • Java线程面试题

    千次阅读 2019-10-30 13:58:47
    在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在Java并发编程的...
  • 在jdk8之前,线程本身提供了join的方法,可以让其他线程加入到当前主线程中,等到所有线程执行完毕自己的逻辑之后,主线程就可以获取并合并各个线程的结果了,下面看实例代码 public class ThreadJoinTest1 { ...
  • Java线程详解(一)Java线程入门

    千次阅读 多人点赞 2019-11-27 20:18:20
    最近听很多面试的小伙伴说,网上往往是一篇一篇的Java线程的文章,除了书籍没有什么学习多线程的一系列文章。但是仅仅凭借一两篇文章很难对多线程有系统的学习,而且面试的时候多线程这方面的知识往往也是考察的...
  • # 执行代码后算出来总是多3 ``` package work2; public class Part implements Runnable{ private int n = 800; private int i = 1; @Override public void run() { // TODO Auto-generated ...
  • Java线程运行多个任务并处理所有结果

    万次阅读 热门讨论 2018-08-23 23:13:47
    执行器框架给我们提供了一个方法,让我们可以发送给执行器一个任务列表,并等待任务列表中的所有任务执行完毕。然后它将返回一个与任务列表对应的Future列表。 package com.primer.demo.util; import lombok....
  • 分别用Thread类和Runnable接口实现的阶乘的计算过程及结果的显示(本来一开始设置的不要积分,不知道为啥变得需要积分了,故此调整一下)
  • [原创]利用Java线程计算矩阵乘法

    千次阅读 2018-12-21 22:16:55
    前段时间在一本操作系统书籍上,看到了可以利用多线程计算矩阵乘法的思想。例如下图中,A矩阵和B矩阵相乘得到C矩阵,那么A矩阵的每一行和B矩阵的每一列的相乘和加和,都可以交给一个线程计算,最终得到cij这个...
  • Java线程超详解

    万次阅读 多人点赞 2019-06-11 01:00:30
    随着计算机的配置越来越高,我们需要将进程进一步优化,细分为线程,充分提高图形化界面的多线程的开发。这就要求对线程的掌握很彻底。 那么话不多说,今天本帅将记录自己线程的学习。 线程的相关API //获取当前...
  • java线程线程运行时的内存模型

    千次阅读 2018-03-29 16:20:30
    本文链接地址: Java内存模型 Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个...Java内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及...
  • Java使用多线程异步执行批量更新操作

    千次阅读 热门讨论 2021-01-11 00:16:32
    写在前面: 相信不少开发者在遇到项目对数据进行批量操作的时候,都会有不少的烦恼,尤其是针对数据量极大的情况下,效率问题就直接提上了...对流程进行控制,控制线程执行顺序。 按照指定大小拆分集合的工具类 import
  • Synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 Java的每个对象都有一个内部锁,如果一个方法用synchronized关键字声明,那么对象...
  • Java线程之暂停线程

    千次阅读 2019-08-11 01:23:13
    Java线程中,suspend()方法可以暂停线程,resume()方法可以恢复线程。 这两个方法都是已经过时的方法。 1.8.1suspend与resume方法的使用 package cn.zxyy.multiThread.Thread.suspendThread; public class ...
  • java中等待所有线程执行结束

    千次阅读 2013-10-23 14:55:30
    今天看到一篇文章,是关于java中如何等待所有线程执行结束,文章总结得很好,原文如下...
  • Java线程实现加法计算

    千次阅读 2018-10-19 11:41:45
    采用多线程的方式实现从1到N的和 1.直接顺序计算 public static void Sum(int N){ long start1 = System.currentTimeMillis(); long sum = 0; for(int i=1; i<=N; i++){ sum += i; ...
  • Java获得一段代码运行时间的方法和线程延时
  • Java获得多线程的返回结果方式

    千次阅读 2020-06-15 14:47:35
    一:Java创建线程方式 继承Thread类或者实现Runnable接口。 但是Runnable 的 run() 方法是不带返回值的,那如果我们需要一个耗时任务在执行完之后给予返回值,应该怎么做呢? 第一种方法:在 Runnable 的实现类中...
  • 计算线程运行时间

    千次阅读 2012-07-31 17:15:11
    import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import common.Utils; public class CountThreadRunTime { private static final int threadNumber = 3;
  • import java.util.ArrayList; import java.util.Scanner; public class Add { public static void main(String[] args) throws Exception { // 定义一个数组并初始化 int[] nums = new int[2000]; for (int...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 352,453
精华内容 140,981
关键字:

java计算所有线程执行时间

java 订阅