如何统计多线程的执行总时间

[code="java"]

public class Test {

public static void main(String[] args) {
    long startTime= System.currentTimeMillis();//开始时间
    new Thread(new Runnable(){
        public void run(){
            for(int i=0;i<1000;i++){
                System.out.println("A:"+i);
            }
            //call method 1
        }
    }).start();

    new Thread(new Runnable(){          
        public void run() {
            for(int j=0;j<1000;j++){
                System.out.println("B:"+j);     
            }               
        }
    }).start();  

              //还有N个

    System.out.println("执行总时间:???");
}

}
[/code]

姑且不讨论多线程为什么要写成这样。

请问,如何统计从执行开始,到最后N个线程都执行完之后所消耗的总时间?

3个回答

[code="java"]long time1 = System.currentTimeMillis();

List threads = new ArrayList();

for(int i=0;i<n;i++) {
Thread t = new Thread(someRunnable);
threads.add(t);
}

for(Thread t : threads) {
t.join(); // 用join()等待所有的线程。先后顺序无所谓,当这段执行完,肯定所有线程都结束了。
}

long time2 = System.currentTimeMillis();

System.out.println(time2-time1);[/code]

在程序一开始打印一下时间,在线程内部结束的时候打印一下时间,最后一个打印的就是结束时间

使用CountDownLatch的await和countDown方法可实现。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# 多线程,记录每个线程运行时间
本人菜鸟,在校学生。 最近在学习多线程技术,实现了一个求解数组中最小值的方法,但是在测试多线程与单线程的计算速度时,却不知道那个才是多线程的运行时间(尴尬到窒息!) *多线程求数组中最小值思想:将一个数组分为两个等大的子数组,并新建两个子线程分别求解每个子数组中的最小值,保存在一个全局变量中。* 源程序如下: using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Diagnostics; namespace Multithread_PSO { class Program { //定义锁 private static readonly object locker = new object(); static void Main(string[] args) { //元素个数 int EleCounts = 100000; //待处理数组 int[] MyArr = new int[EleCounts]; //前半段数组 int[] TempArr1 = new int[EleCounts / 2]; //后半段数组 int[] TempArr2 = new int[EleCounts / 2]; for (int i = 0; i < EleCounts; i++) { int iSeed = DateTime.Now.Millisecond; Random rd = new Random(iSeed+i); //随机给数组赋值 MyArr[i] = rd.Next(EleCounts); //将数组拆分为两个大小相等的数组 if(i<EleCounts/2) { TempArr1[i] = MyArr[i]; } else { TempArr2[i - EleCounts / 2] = MyArr[i]; } } //主线程 FindMinElement(MyArr); //新建两个线程th1,th2 Thread th1 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th1.Name = "子线程1"; Thread th2 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th2.Name = "子线程2"; Stopwatch sw = new Stopwatch(); sw.Start(); th1.Start(TempArr1); //th1.Join(); th2.Start(TempArr2); //th2.Join(); sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("多线程获得最小值为: {0}, 计时器3共耗时:{1}/ms!\n", MinValue, ts2.TotalMilliseconds); Console.ReadKey(); } public static void thFindMinElement(object DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = (int[])DivMyArr; if (IsFirstRun) { MinValue = MyArr[0]; IsFirstRun = false; } for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("当前线程名称(ID)为:{1} ({0}),最小值为:{2},共耗时:{3}/ms!\n", ThNumber, Thread.CurrentThread.Name, MinValue, ts2.TotalMilliseconds); } public static void FindMinElement(int[] DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = DivMyArr; MinValue = MyArr[0]; for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("主线程ID为:{0},最小值为: {1}, 共耗时:{2}/ms!\n", ThNumber, MinValue, ts2.TotalMilliseconds); } private static int minValue; private static bool IsFirstRun = true; private static int MinValue { get { lock (locker) { return minValue; } } set { minValue = value; } } } } ***问题1:*** 如果不添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881888_346609.png) ***问题2:*** 如果添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881971_593742.png) ***问题3:*** 如果均不是,那该怎么计算多线程的总运行时间呢,还望大神不吝赐教!!!
java多线程解决龟兔鸡赛跑
场景如下。兔子、乌龟和公鸡进行赛跑,其中兔子每秒0.6米的速度,每跑2米休息3秒;乌龟每秒跑0.2米,不休息;公鸡每秒1.2米,每跑5秒需要吃一条虫子,耗时2秒。当其中一个跑到终点后其他动物个不跑了,比赛结束;比赛道路长20米。采用多线程技术模拟该比赛过程。 1、创建Java项目工程 2、采用Java多线程技术实现,合理设计线程的实现方式 3、要求创建测试类,在主函数启动该比赛的模拟线程 4、启动后每个动物使用一个线程,打印每个线程的id,并为线程设置上对应的 名称,比如公鸡的线程名称为 公鸡 5、使用继承技术,创建动物类,乌龟、兔子和公鸡需要从动物类继承 6、控制台每隔一秒打印一次每个动物当前共计跑了多少米 7、控制台能够打印兔子每次开始休息的时间,时间格式要求按照年月日时分 秒的格式输出 8、其中一个动物到达终点后,其他动物停止跑动,其它线程死亡 9、在控制台每隔一秒打印一次 三个动物一共跑了多少米 10、比赛结束后,把乌龟、兔子、公鸡线程对象,存入到List集合中 11、对List集合按照每个对象用的总时间进行排序 12、对List集合排序后并在控制台打印跑的总长度,用的总时间和比赛的名次 13、代码编写规范,注释全面
线程池已经关闭,但是每次使用完,项目总线程数总是多两条,线程池已经关闭
newFixedThreadPool()方式创建线程池,不管我创建的池子是多大的,每次我调用多线程跑完自己的需求,项目中总是会多出2条线程, 我的关闭线程池顺序: .shutdown 并且用while(true){ if (.isTerminated()){ break;}}等待线程池关闭,接 着还有.shutdownNow() 然后接着还有: .awaitTermination(20, TimeUnit.SECONDS) 执行完,我看项目里面活着的线程,总是每执行一次就多两条线程在里面,不管我执行跑多少数据,或者说我把池子设置成多大,都是多两条,大佬们....这个怎么搞啊
C语言多线程运行时间计算问题
如题。计算着两个线程执行的总时间,如何计算。 ``` #include <stdio.h> #include <stdlib.h> #include <pthread.h> int x; pthread_mutex_t mutex; void thread1(void) { while(x>0) { pthread_mutex_lock(&mutex); printf("Thread 1 is running x=%d/n",x); x--; pthread_mutex_unlock(&mutex); sleep(1); } pthread_exit(NULL); } void thread2(void) { while(x>0) { pthread_mutex_lock(&mutex); printf("Thread 2 is running x=%d/n",x); x--; pthread_mutex_unlock(&mutex); sleep(1); } pthread_exit(NULL); } int main() { pthread_t id1,id2; int ret; ret = pthread_mutex_init(&mutex,NULL); if(ret!=0) { printf("pthread_mutex_init error/n"); exit(0); } x=10; ret = pthread_create(&id1,NULL,(void *)thread1,NULL); if(ret!=0) { printf("Create pthread 1 error/n"); exit(0); } ret = pthread_create(&id2,NULL,(void *)thread2,NULL); if(ret!=0) { printf("Create pthread 2 error/n"); exit(0); } pthread_join(id1,NULL); pthread_join(id2,NULL); printf("Done/n"); return 0; } ```
python restful api怎么实现多线程,求大神解答!!!
python restful api怎么实现多线程多进程,求大神解答!!! 就是我看到多线程的例子都是t = threading.Thread(target=函数) 然后t.start启动线程,那如果是restful 写的api呢,总不能写成 t = threading.Thread(target=类名.get或者post吧)
Java多线程的一个疑惑
为什么执行的结果中 创建线程 1 创建线程 2 创建线程 3 这三个总排在结果的最前面。是不是因为具有相同优先权的线程,他们都会首先执行各自的构造函数,然后再随机执行run()方法的内容? 帮忙解决一下,谢谢! 图片在附件里,不知道怎么弄上文本、、、、
关于线程不同步执行的问题
``` public class TestSynchronous implements Runnable{ Timer timer = new Timer(); public static void main(String[] args){ TestSynchronous test = new TestSynchronous(); Thread t1 = new Thread(test); Thread t2 = new Thread(test); t1.setName("t1"); t2.setName("t2"); t1.start(); t2.start(); } public void run(){ timer.add(Thread.currentThread().getName()); } } class Timer{ private static int num = 0; public void add(String name){ num++; try{ Thread.sleep(1); }catch(InterruptedException e){ e.printStackTrace(); } System.out.println(name+": " +"是第"+num+"线程"); } } ``` 第一次在命令行编译执行时是这样: ![图片说明](https://img-ask.csdn.net/upload/201603/19/1458353164_971027.png) 随着执行次数的增加,有时候输出变成这样了: ![图片说明](https://img-ask.csdn.net/upload/201603/19/1458353159_773208.png) 下面这个图是总的执行次数,可以看出,有一个num输出为1: ![图片说明](https://img-ask.csdn.net/upload/201603/19/1458353221_427714.png)
python单线程省时间是固定的吗,时间是根据什么有关系
python 的多线程一定比单线程省时间 而且是固定数值8s吗![图片说明](https://img-ask.csdn.net/upload/201901/02/1546399795_312136.jpg)![图片说明](https://img-ask.csdn.net/upload/201901/02/1546399805_563371.jpg) 如图二个单线程总时间是18s 执行的多线程时间花费10s(控制台20-10) 固定数值是8 我换了方法的循环次数 计算完还是省8s时间 这是固定的吗
MongoDB多线程读取集合和单线程效率一样?
要读取MongoDB中的50W条数据,因为数据太多决定分批读取每次读取10000条,每次读取时间大概需要2s,循环50次大概是用50*2=100s; 由于化肥时间太长决定使用多线程,程序中并发了10个线程去查询, 本来以为值需要2*50/10=10s钟就可以完成,结果发现最终总时间还是用了100s 郁闷。。。。 查看日志的时候发现第一个线程用可2s,然后后面的4s 5s 8s 。。。。100s逐渐增多。 现象看来是线程读取出现了等待,mongo读取难道也是阻塞的吗,求大神指导
Linux pthread_create多线程创建耗时不同?
# 主要问题 用多线程来同时处理一副图像的卷积,以达到并行加速的效果,运行环境是NanoPC T2的安卓开发板,arm v7 cpu # 调用函数 * pthread create(不知道为什么打下划线会自动斜体,函数是有下划线的) * pthread join # 主要思路 建立thread id为从0到NUM的多个线程,然后在每个线程中,分别从这幅图像的第0个,第1个,第2个。。。开始卷积运算,相当于把这幅图像逐个分配到NUM个线程中去计算,最后汇总 # 主体代码 for(int i=0; i<THREAD_NUM; i++) //THREAD_NUM = 4 { param->thread_tid = i; //0,1,2,3 CHECK(!pthread_create(&thread_[i], &attr, im2col_cpu_pthread<Dtype>,(void*)param)) << "Pthread execution failed."; sem_wait(&thread_sem); } for(int i=0; i<THREAD_NUM; i++) CHECK(!pthread_join(thread_[i], NULL)) << "Pthread joining failed."; 其中im2col_cpu_pthread是多线程函数入口,是并行卷积的主要对象 此外,由于一次程序每一次输入不止一张图像,所以会在循环中多次调用以上函数,也就是多次create和join # 结果 图像卷积的结果是正确的,我分别对28*28单通道图,32*32的三通道图,256*256的三通道图进行了测试,后两个的加速效果分别为20%和30%左右,但是28*28的单通道图反而变慢了,我觉得是在arm下CPU创建线程耗时太多?我用gettimeofday粗略打印了处理28*28图像时创建线程的时间,部分结果如下: * The thread 0's creation costs 75 time. * The thread 1's creation costs 937 time. * The thread 2's creation costs 63 time. * The thread 3's creation costs 62 time. * The thread 0's creation costs 75 time. * The thread 1's creation costs 933 time. * The thread 2's creation costs 62 time. * The thread 3's creation costs 62 time. * The thread 0's creation costs 80 time. * The thread 1's creation costs 896 time. * The thread 2's creation costs 64 time. * The thread 3's creation costs 63 time. * The thread 0's creation costs 75 time. * The thread 1's creation costs 937 time. * The thread 2's creation costs 65 time. * The thread 3's creation costs 63 time. * The thread 0's creation costs 75 time. * The thread 1's creation costs 933 time. * The thread 2's creation costs 64 time. * The thread 3's creation costs 64 time. 而对于28*28的每一个线程的卷积时间也就是200左右(单位相同),四个线程(NUM = 4)加起来900左右,所以可以看出线程创建中每一张图都有一个线程占用了相当于总处理时间的时间,32*32*3和256*256*3的线程创建时间也和28*28*1时间相同,但是占比没有这么大。 # 问题求助 为什么会在同一张图像的多线程创建时有一个线程耗时这么大?是我的代码问题吗?怎么解决呢?求点拨,暂时能想到的描述就这么多了,如果还需要补充我再添加,更新了一下,发现线程创建时间那里丢了两个。。
java多线程的一个简单问题
该线程是一个求某个数的素数总个数 利用多线程来操作 为什么创建一个实现Runnable接口的对象 其他线程共享该对象 输出结果却是各自工作的结果 素数总和也不对 package Reflect; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Threaddemo { public static void main(String[] args) { test t =new test(10); new Thread(t,"Thread1").start(); new Thread(t,"Thread2").start(); new Thread(t,"Thread3").start(); new Thread(t,"Thread4").start(); new Thread(t,"Thread5").start(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(t.getNum()+"以内的素数和:"+PrimeMethod.account); } } class test implements Runnable{ final Lock lock =new ReentrantLock(); private int num; test(int num){ this.num=num; } public int getNum(){ return num; } public void run() { for(int i=num;i>1;i--){ if(PrimeMethod.isPrime(i)){ lock.lock(); System.out.println(Thread.currentThread().getName()+"输出一个质数:"+i); PrimeMethod.account++; lock.unlock(); } } } } class PrimeMethod{ static int account =0; public static boolean isPrime(long i){ for(long j=2;j<=Math.sqrt(i);j++) if(i%j==0) return false; return true; } } 输出结果如图 求大神解答 谢谢 ![图片说明](https://img-ask.csdn.net/upload/201703/24/1490322812_704273.png)
Qt 基于UDP的多线程文件传输
发送端5个线程发送数据,接收端主线程接收到数据放入循环队列,同时接收端一个子线程从队列中取出数据并写入文件,但总丢包,不知道问题出在哪?
.net 多线程 调用接口
``` 情况是这样的,我做了一个定时器,每天某个时间调用接口,发送所有数据。 由于一次数据可能多条 所以做两个分页查询(先说明下 为了让没有数据的时候 不从复调用接口,所以每天只执行一次) 在下面必须添加Thread.Sleep();否则无法按for循环执行。 public void StartOnHour_GuoQi(object sender, System.Timers.ElapsedEventArgs e) { //整点发送 if (e.SignalTime.Hour == hour_start && e.SignalTime.Minute == minute_start && e.SignalTime.Second == 0) { //执行请求处理 try { var param = new { pageindex = 0, pagesize = 10 }; var result_page = InvokeAgentService("OverdueDataCount", param); dynamic page_Json = JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result_page); //总记录数 int total = CommFunction.IntParse(page_Json.Data.TotalCount); //总页数 int allpage = 0; /*分页*/ if ((total % pageSize) == 0) { allpage = total / pageSize; } else { allpage = (total / pageSize) + 1; } for (int pageIndex = 0; pageIndex < allpage; pageIndex++) { var thread_GuoQi = new Thread(() => { var parameters = new { pageindex = pageIndex, pagesize = pageSize }; var result = InvokeAgentService("GetOverdueData", parameters); dynamic resutlJson = JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result); if (resutlJson != null && resutlJson.Code == "10000") { foreach (var item in resutlJson.Data.Items) { //执行代码 } else { LogHelp.SysLog("请求返回结果错误结果--接口数据:" + result, "error"); } }); thread_GuoQi.Start(); Thread.Sleep(50); } } catch (Exception ex) { LogHelp.SysLog("执行过期通知处理程序错误" + ex.Message, "error"); } } } ```
SXSSFWorkbook在多线程下导出大量数据到excel中部分数据丢失的问题
在用线程池,起多线程的时候,用SXSSFWorkbook导出大量数据生成excel文件到磁盘, 比我要查询10万条数据,分10个线程每个线程处理1万条,然后写入excel表格, 因为我写入表格是先生成sheet,最后通过文件流写入到一个文件中,但是非要设置SXSSFWorkbook(**100001**)就是内存中保留最大的记录数必须大于总的记录数,才 不会把数据丢失,如果设置小于总的记录数,就会造成文件的数据丢失, 网上不是说,如果处理的记录数大于SXSSFWorkbook内存中保留的记录数,不是会把多余的写入到磁盘么,就像那个队列一样,先入先出,当大于队列的长度的时候。如果设置过大,都读到内存中处理会不会导致内存溢出呢 请问这个问题怎么解。 下面是我的思路,先是设定起最大的线程池为10个,然后每个线程处理1万条数据,查询记录数,加入任务队列中去处理把数据生成行和列,这个sheet是全局变量,最后如果任务都执行完了,关闭线程池,最后把通过文件流写入到磁盘。
PHP 实现多线程方式? 比如pthreads ?
假如客户端http 请求到服务端过来,服务端需要从 三个地方获取数据,然后返回给客户端,比如从A 接口获取数据 a,从数据库查询数据b,从C接口 请求数据获得数据 c ,每个操作耗时 两秒,如果用同步阻塞方式,则需要6秒处理完返回给客户端,php有没什么并发实现的方式,则总耗时是 耗时最大的操作,2秒。比如多线程?
java多线程的读写锁问题
package cn.fans.chapter2.six; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /** * * @author fcs * @date 2015-4-12 * 描述:使用读写锁实现同步访问 * 说明:使用ReadWriteLock接口。 */ public class PricesInfo { private double price1; private double price2; private ReadWriteLock lock; public PricesInfo(){ price1 = 1.0; price2 = 2.0; lock = new ReentrantReadWriteLock(); } /** * * 作者:fcs * 描述:使用锁机制进行读操作 * 说明: * 返回:price1 * 参数: * 时间:2015-4-12 */ public double getPrice1(){ double value; lock.readLock().lock(); try{ value = price1; }finally{ lock.readLock().unlock(); } return value; } /** * * 作者:fcs * 描述:使用锁机制进行读操作 * 说明: * 返回:price2 * 参数: * 时间:2015-4-12 */ public double getPrice2(){ double value; lock.readLock().lock(); try{ value = price2; }finally{ lock.readLock().unlock(); } return value; } /** * * 作者:fcs * 描述:使用锁机制进行写操作 * 说明: * 返回: * 参数:price1, price2 * 时间:2015-4-12 */ public void setPrice(double price1,double price2){ lock.writeLock().lock(); try{ this.price1 = price1; this.price2 = price2; }finally{ lock.writeLock().unlock(); } } } package cn.fans.chapter2.six; /** * * @author fcs * @date 2015-4-12 * 描述:读线程 * 说明: */ public class Reader implements Runnable { private PricesInfo pricesInfo; public Reader(PricesInfo pricesInfo) { this.pricesInfo = pricesInfo; } @Override public void run() { for(int i =0;i<10;i++){ System.out.printf("%s: price 1 : %f\n",Thread.currentThread().getName(),pricesInfo.getPrice1()); System.out.printf("%s Price 2 : %f\n ",Thread.currentThread().getName(),pricesInfo.getPrice2()); } } } package cn.fans.chapter2.six; import java.util.concurrent.TimeUnit; /** * * @author fcs * @date 2015-4-12 * 描述:写线程 * 说明: */ public class Writer implements Runnable { private PricesInfo pricesInfo; public Writer(PricesInfo pricesInfo) { this.pricesInfo = pricesInfo; } /** * 循环修改两个价格5次,每次修改后线程将休眠2秒钟 */ @Override public void run() { for(int i=0;i< 5;i++){ System.out.printf("Writer: Attempt to modify the prices.\n"); pricesInfo.setPrice(Math.random()*10, Math.random()*10); System.out.println("Writer:price have been modified."); try { Thread.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } } } } package cn.fans.chapter2.six; public class Main { public static void main(String[] args) { PricesInfo pricesInfo = new PricesInfo(); Reader readers[] = new Reader[5]; Thread treader [] = new Thread[5]; for(int i =0;i<5;i++){ readers [i] = new Reader(pricesInfo); treader[i] = new Thread(readers[i]); } Writer writer = new Writer(pricesInfo); Thread wthread = new Thread(writer); for(int i = 0;i < 5;i++){ treader[i].start(); } wthread.start(); } } ![图片说明](https://img-ask.csdn.net/upload/201504/12/1428809760_354801.png) 这是java并发实战手册第二章的代码,但是在我机子上运行的结果与书上不一样,写锁好像不起作用,我重新检查了代码并且运行了几遍,感觉总像读线程读了脏数据,希望有人能指点迷津。共同进步
16条线程100w条数据通过处理后得到4种形式的50w条数据分别插入4张表中,怎么安排16条线程的工作使得总花费时间最短?
假设100w条数据,经过处理后的到 1类 100w条数据需要入A表, 2类 100w条数据需要入B表, 3类 100w条数据需要入C表, 4类 100w条数据需要入D表. 目前本人想到的方案有两个 (1)16条线程,给每个表分配4条线程,每条线程分配25w条 (2) 给A表分配16条线程,每条线程6.25,待A表任务结束后,16条线程分配给B表 想问一下,1,2两个方案有何区别?那个方案会更好?为什么?还有其他更好的方案吗?
关于java多线程操作invokeAll空指针的问题
求救各位大神: ``` public static void threadTestAll(String dirName) { long start = System.currentTimeMillis(); ExecutorService pool = Executors.newFixedThreadPool(30); List<Callable<String>> tasks = new ArrayList<Callable<String>>(); File dir = new File(dirName); for(File f:dir.listFiles(new myFilter())){ myTask t = new ThreadTest2().new myTask(f.getAbsolutePath()); tasks.add(t); } try { List<Future<String>> r = pool.invokeAll(tasks); for (Future<String> f : r) { if(f != null){ System.out.println(f); System.out.println("task result=" + f.get()); } } pool.shutdown(); long end = System.currentTimeMillis(); System.out.println("测试用了"+(end-start)+"毫秒"); } catch (Exception e) { System.out.println("here"); e.printStackTrace(); } } ``` ``` class myTask implements Callable<String> { final String fileName; public myTask(String fileName) { this.fileName = fileName; } @Override public String call() throws Exception { System.out.println("线程开始查找"+fileName); List<String> l = FileUtils.serachFileNames(fileName, "[七七电视www.77ds.com]蚁人TS清晰中字.mp4", false); if(l.size() != 0){ // System.out.println(l.get(0)); System.out.println(l.get(0)); return l.get(0); } return ""; // throw new Exception("没找到"); } } ``` 我的两段代码,没有发现任何有空指针异常的情况,单步调试也不知道哪出问题了,在这里 System.out.println(f); System.out.println("task result=" + f.get()); 打印也可以把对象打印出来,但不知道为啥,总有一个对象get的时候出错了,报空指针问题,求大神指教 这是结果 ``` 线程开始查找d:\$RECYCLE.BIN 线程开始查找d:\7450 线程开始查找d:\android 线程开始查找d:\360WiFi 线程开始查找d:\cha 线程开始查找d:\360Downloads 线程开始查找d:\maven 线程开始查找d:\opt 线程开始查找d:\Program Files (x86) 线程开始查找d:\DOWNLOAD 线程开始查找d:\RJ 线程开始查找d:\updateEdb 线程开始查找d:\work 线程开始查找d:\program 线程开始查找d:\kinggsoft 线程开始查找d:\Program Files 线程开始查找d:\迅雷下载 线程开始查找d:\shuju 线程开始查找d:\Youku Files 线程开始查找d:\System Volume Information 线程开始查找d:\备份 d:\迅雷下载\新建文件夹\[七七电视www.77ds.com]蚁人TS清晰中字.mp4 java.util.concurrent.FutureTask@6ef0eed6 task result= java.util.concurrent.FutureTask@bd05c81 task result= java.util.concurrent.FutureTask@1c691f36 task result= java.util.concurrent.FutureTask@398020cc task result= java.util.concurrent.FutureTask@ae94e92 task result= java.util.concurrent.FutureTask@5b2558d6 task result= java.util.concurrent.FutureTask@70eb7859 task result= java.util.concurrent.FutureTask@732a54f9 task result= java.util.concurrent.FutureTask@6030e280 task result= java.util.concurrent.FutureTask@296672d6 task result= java.util.concurrent.FutureTask@4fd54d6 task result= java.util.concurrent.FutureTask@13ccb029 task result= java.util.concurrent.FutureTask@63415de6 task result= java.util.concurrent.FutureTask@587bd9f2 task result= java.util.concurrent.FutureTask@2b21cc40 task result= java.util.concurrent.FutureTask@37e893df here java.util.concurrent.ExecutionException: java.lang.NullPointerException at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) at java.util.concurrent.FutureTask.get(FutureTask.java:83) at codeTest.ThreadTest2.threadTestAll(ThreadTest2.java:48) at codeTest.ThreadTest2.main(ThreadTest2.java:30) Caused by: java.lang.NullPointerException at codeTest.ThreadTest2$myTask.call(ThreadTest2.java:91) at codeTest.ThreadTest2$myTask.call(ThreadTest2.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) ```
程序运行用时的计算,求大神帮忙
在多线程并行处理的程序下如何确定总程序的用时?我通过在main函数刚进入和最后退出时分别尝试加入了clock函数和QueryPerformanceFrequency函数,但执行结果都没有对处理时间的显示,为什么呢?是因为处理线程在最后都被释放了吗?那应该怎样求这个总时间呢?
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问