import java.util.concurrent.Callable;
/**
* 线程类,需要返回值的 ,实现Callable接口
* @author xhc
*
*/
@SuppressWarnings("rawtypes")
public class MyThread implements Callable{
@SuppressWarnings("static-access")
@Override
public Object call() throws Exception {
Thread.currentThread().sleep(1000);//睡眠一秒
return Thread.currentThread().getName();
}
}
测试类:
package com.xjiuge.test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class App {
//建立线程池
static ExecutorService pool = Executors.newCachedThreadPool();
@SuppressWarnings("unchecked")
public static void main(String[] args) {
//存放future的集合
List<Future<String>> list = new ArrayList<>();
long st = System.currentTimeMillis();//开始时间
//循环5次,开启5个线程
for (int i = 0; i < 5; i++) {
//获取线程类返回的值,用future接收
Future<String> future = pool.submit(new MyThread());
//将future放入list
list.add(future);
}
try {
//遍历list读取future中的值
for (Future<String> future : list) {
while(true) {
//判断线程操作是否执行完毕,并且操作没有被取消掉
if(future.isDone() && !future.isCancelled()) {
//调用get方法获取返回值
String result = future.get().toString();
System.out.println(result);
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
long et = System.currentTimeMillis();//结束时间
System.out.println("总耗时:" + (et - st) + "ms");
}
}
打印结果:
pool-1-thread-1
pool-1-thread-2
pool-1-thread-3
pool-1-thread-4
pool-1-thread-5
总耗时:1004ms
millis是“毫秒”,一般用于取得系统时间,例如: System.currentTimeMillis(); 返回的是以毫秒为单位的当前时间。
在代码块中计时可以使用编程语言提供的计时工具或者自己编写计时逻辑来实现。常见的方法包括使用内置的计时库或函数,比如Python中的time模块或Java中的System.currentTimeMillis()方法,来记录代码块开始和结束的时间戳,然后计算时间差以获得代码块的执行时间。
另一种方法是在代码块开始和结束处插入计时开始和结束的标记,并记录时间戳,然后计算时间差。这样可以帮助开发者分析代码的性能,并且可以优化代码以提高执行效率。
是毫秒。因为system.currenttimemillis方法返回的是从UTC零点开始到当前系统时间的毫秒数。在Java编程中,我们可以使用这个方法来计算程序的执行时间等各种时间差。同时,在Java 8中,还引入了Instant类,这个类也可以用来表示时间,并且它的精度更高,可以精确到纳秒级别。
还没有评论,来说两句吧...