低调看直播体育app软件下载
本篇文章主要介绍了" 多线程任务计算",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
最近在研究多线程任务计算可以有返回值,所以写了一个简单多线程任务计算的demo,代码如下:package thread;import java.util.Arr...
最近在研究多线程任务计算可以有返回值,所以写了一个简单多线程任务计算的demo,代码如下:
package thread;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class DuoRenWuJiSuanTest {
public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
// 创建任务集合
List<>> taskList = new ArrayList<>>();
// 创建线程池
ExecutorService exec = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
// 传入Callable对象创建FutureTask对象
FutureTask ft = new FutureTask(new ComputeTask(i+""));
taskList.add(ft);
// 提交给线程池执行任务,也可以通过exec.invokeAll(taskList)一次性提交所有任务;
exec.submit(ft);
}
System.out.println("所有计算任务提交完毕, 主线程接着干其他事情!");
// 开始统计各计算线程计算结果
Integer totalResult = 0;
for (FutureTask ft : taskList) {
try {
//FutureTask的get方法会自动阻塞,直到获取计算结果为止
totalResult = totalResult + ft.get();
// totalResult = totalResult + ft.get(1000,TimeUnit.MILLISECONDS);//等待一秒获取结果,子线程没有执行完则抛出异常
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
// 关闭线程池
exec.shutdown();
System.out.println("多任务计算后的总结果是:" + totalResult+";话费时间:"+(endTime-startTime));
}
}
class ComputeTask implements Callable {
private Integer result = 0;
private String taskName = "";
public ComputeTask(String taskName){
this.taskName = taskName;
System.out.println("生成子线程计算任务: "+taskName);
}
public String getTaskName(){
return this.taskName;
}
@Override
public Integer call() throws Exception {
for (int i = 1; i <= 100; i++) {
result += i;
}
// 休眠5秒钟,观察主线程行为,预期的结果是主线程会继续执行,到要取得FutureTask的结果是等待直至完成。
Thread.sleep(new Random().nextInt(5000));
System.out.println(Thread.currentThread().getName()+"子线程计算任务: "+getTaskName()+" 执行完成!");
return result;
}
}
代码的核心就是创建List<>> 进行线程任务的计算结果的接收。然后再循环使用futureTask.get()方法来进行结果的获取。要注意的是get方法会阻塞主线程,所以主线程会等待所有线程的计算结果完成之后在进行求和处理。一定要注意的是 FutureTask是Future接口的实现类
以上就介绍了 多线程任务计算,包括了方面的内容,希望对其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_4596257.html