Java并发实战:Callable+FutureTask实现多线程判分汇总
来源:互联网 发布:怎样做seo 编辑:程序博客网 时间:2024/05/29 10:51
需求分析:
总结自己项目中用到多线程的地方,之前一级考试系统,在考生交卷的过程中,需要做很多事情,导致交卷过程很慢。当然不能让考生一直等待交卷这个过程,于是使用了Callable+FutureTask来优化交卷的速度。下面有优化的伪代码,仅供参考。
介绍callable和futuretask:
1.callable
Callable位于java.util.concurrent包下,它也是一个接口,在它里面也只声明了一个方法call()。一般情况下是配合ExecutorService来使用的,submit方法的参数。
2.futuretask
RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。FutureTask是Future接口的一个唯一实现类。
代码实现:
package test.thread;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;public class testFuture { public static void main(String[] args) { //使用Callable+FutureTask获取执行结果 //new 一个线程池 ExecutorService executor = Executors.newCachedThreadPool(); //开启3个判分的任务 Task1 task1 = new Task1(); Task2 task2 = new Task2(); Task3 task3 = new Task3(); //把任务放到futuretask中 FutureTask<Integer> futureTask1 = new FutureTask<Integer>(task1); FutureTask<Integer> futureTask2 = new FutureTask<Integer>(task2); FutureTask<Integer> futureTask3 = new FutureTask<Integer>(task3); //1.子线程进行计算 线程执行 需要一个runable接口,futuretask实现了它 executor.submit(futureTask1); executor.submit(futureTask2); executor.submit(futureTask3); executor.shutdown(); try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } try { //2.返回结果 futureTask.get() int danxuanti=futureTask1.get(); int panduanti=futureTask2.get(); int zuowenti=futureTask3.get(); int sum=danxuanti+panduanti+zuowenti; System.out.println("单选题子线程返回结果,主线程计算"+futureTask1.get()); System.out.println("判断题子线程返回结果,主线程计算"+futureTask2.get()); System.out.println("作文题子线程返回结果,主线程计算"+futureTask3.get()); System.out.println("总分"+sum); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }}class Task1 implements Callable<Integer>{ @Override public Integer call() throws Exception {System.out.println("单选题判分中。。。"); Thread.sleep(3000);return 10; }}class Task2 implements Callable<Integer>{@Overridepublic Integer call() throws Exception {System.out.println("判断题判分中。。。");Thread.sleep(3000);return 20;}}class Task3 implements Callable<Integer>{@Overridepublic Integer call() throws Exception {System.out.println("作文题判分中。。。");Thread.sleep(3000);return 30;}}
console返回结果
单选题判分中。。。判断题判分中。。。作文题判分中。。。单选题子线程返回结果,主线程计算10判断题子线程返回结果,主线程计算20作文题子线程返回结果,主线程计算30总分60
阅读全文
0 0
- Java并发实战:Callable+FutureTask实现多线程判分汇总
- Java多线程 Callable Future FutureTask
- 【Java多线程】-Callable,Future,FutureTask
- Java并发编程:Callable、Future和FutureTask的实现
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- Java并发编程:Callable、Future和FutureTask
- 校招准备系列:每天一道算法题(10)-二维数组查找
- C语言程序的基本结构--HelloWrold篇
- C++ STL之deque解析(1)---《C++ STL》
- 【bzoj1965】【AHOI2005】洗牌
- (M)Dynamic Programming,DFS:Shopping Offers
- Java并发实战:Callable+FutureTask实现多线程判分汇总
- 关于GAN网络的隐空间维度选择问题
- 《Redis的主从复制》原理详解
- c++知识点---文件的简单读写
- SpringMVC拦截器(资源和权限管理)
- 7.查询性能优化
- linux运维面试必备
- 购物车加减(bootsrap)
- x86汇编从实模式到保护模式 记录思考和习题答案