java-多线程future等待返回
多线程中需要返回值, java中有个fork/join模型, 没有细研究, 简单实用callable进行了返回
Thread1
package com.iwhere.easy.travel.test.thread;
import java.util.concurrent.Callable;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSONObject;
public class Thread1 implements Callable<String>{
@Override
public String call() throws Exception {
Thread.sleep();
System.out.println("thread1 sleep 5s");
new RestTemplate().getForObject("http://abc.2314", JSONObject.class);
return "i am thread one";
}
}
Thread2
package com.iwhere.easy.travel.test.thread;
import java.util.concurrent.Callable;
public class Thread2 implements Callable<String>{
@Override
public String call() throws Exception {
Thread.sleep();
System.out.println("thread2 sleep 2s");
if ( == ) throw new RuntimeException();
return "i am thread two";
}
}
Thread3
package com.iwhere.easy.travel.test.thread;
import java.util.concurrent.Callable;
public class Thread3 implements Callable<String>{
@Override
public String call() throws Exception {
Thread.sleep();
System.out.println("thread3 sleep 8s");
// Thread.currentThread().interrupt();
return "i am thread three";
}
}
main类
package com.iwhere.easy.travel.test.thread; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; public class MyThreadTest { private static ExecutorService threadPool = Executors.newFixedThreadPool(); public static void main(String[] args) throws InterruptedException, ExecutionException { Thread1 thread1 = new Thread1();
Future<String> futureTask1 = threadPool.submit(thread1); Thread2 thread2 = new Thread2();
Future<String> futureTask2 = threadPool.submit(thread2); Thread3 thread3 = new Thread3();
Future<String> futureTask3 = threadPool.submit(thread3); String string1 = null;
String string2 = null;
String string3 = null; try {
string1 = futureTask1.get();
}catch (Exception e) {
futureTask1.cancel(true);
}
try {
string2 = futureTask2.get();
}catch (Exception e) {
futureTask2.cancel(true);
}
try {
string3 = futureTask3.get();
}catch (Exception e) {
futureTask3.cancel(true);
} // Thread.currentThread().wait(1000);
// futureTask1.cancel(true);
// futureTask2.cancel(true);
// futureTask3.cancel(true); System.out.println(string1 + ": " + string2 + ": " + string3); threadPool.shutdown();
}
}
这样在线程中抛出异常,仍然可以,
有一个问题仍然存在, 要是线程中莫名停止了, 就不会反回值 了..
java-多线程future等待返回的更多相关文章
- paip.java 多线程参数以及返回值Future FutureTask 的使用.
paip.java 多线程参数以及返回值Future FutureTask 的使用. 在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是vo ...
- Java多线程Future模式
Java多线程Future模式有些类似于Ajax的异步请求Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 假设服务器的处理某个业务,该业务可以分 ...
- java 多线程—— 线程等待与唤醒
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)
*java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时 ...
- Java 多线程 - Future
Java中Future的使用场景和解析 https://blog.csdn.net/hongtaolong/article/details/83349705 (细看!!!)
- Java 多线程Future和FutureTask
Future表示一个任务的周期,并提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务. Future接口源码: public interface Future<V> ...
- java多线程Future和Callable类的解释与使用
一,描写叙述 在多线程下编程的时候.大家可能会遇到一种需求,就是我想在我开启的线程都结束时,同一时候获取每一个线程中返回的数据然后再做统一处理,在这种需求下,Future与Callable的组合就派 ...
- java 多线程 Future callable
面向对象5大设计原则 1.单一职责原则 一个类只包含它相关的方法,增删改查.一个方法只包含单一的功能,增加.一个类最多包含10个方法,一个方法最多50行,一个类最多500行.重复的代码进行封装,Do ...
- java多线程的等待唤醒机制及如何解决同步过程中的安全问题
/* class Person{ String name; String sex; boolean flag = true; public void setPerson(String name, St ...
随机推荐
- HDU1072 Nightmare(BFS) 2016-07-24 14:02 40人阅读 评论(0) 收藏
Nightmare Problem Description Ignatius had a nightmare last night. He found himself in a labyrinth w ...
- static关键字(二)作用总结
静态变量和静态方法 static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static修饰的方法属于类方法,可以通过 ...
- 如何关闭D10 启动后自动打开的 WelCome页
在快捷方式上 修改为 "C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\bds.exe" -pDelphi -np 最后增加 ...
- 【转】【译】【Win10】在你的程序标题栏中显示后退按钮
原文地址:http://www.sharpgis.net/post/2015/05/21/Displaying-a-backbutton-in-your-app-window 免责声明:这篇文章基于 ...
- window2012如何查看进程中PID所对应的IIS应用程序池
1.打开任务管理器,找到任意IIS进程,右击选择打开文件位置,获取到文件路径,例如:C:\Windows\System32\inetsrv 2.使用管理员打开cmd命令行工具,然后切换到刚才获取到文件 ...
- 解决使用ICsharpCode解压缩时候报错Size MisMatch4294967295;的错误
如果是一个文件夹生成的zip文件,解压缩时候不会报错. 如果是一个文件夹里面包含着两个子文件夹,而且每个子文件夹里面都有着文件.生成的zip文件在解压时候就出报这个错误. 具体的解决办法,通过网上搜索 ...
- PageAdmin CMS网站建设教程:如何创建及管理栏目?
PageAdmin CMS网站制作教程:如何创建及管理栏目?1.登录管理后台后,在顶部导航中找到网站,并点击: 2.在左侧栏目中找到栏目管理,并点击: 3.进入到栏目管理页面,在顶部找到菜单,点击添加 ...
- leetcode 75. 颜色分类 JAVA
题目: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和 ...
- flask源码解析之上下文为什么用栈
楔子 我在之前的文章<flask源码解析之上下文>中对flask上下文流程进行了详细的说明,但是在学习的过程中我一直在思考flask上下文中为什么要使用栈完成对请求上下文和应用上下文的入栈 ...
- Mysql错误处理: /usr/bin/mysqld_safe: line xxx: xxxx Killed ... (mysql自动停止 Plugin FEDERATED is disabled 的完美解决方法)
哈哈哈,问题总算解决,内心抑不住的开心 centos mysql 问题:Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Table 'mysql.p ...