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 ...
随机推荐
- Hdu4632 Palindrome subsequence 2017-01-16 11:14 51人阅读 评论(0) 收藏
Palindrome subsequence Problem Description In mathematics, a subsequence is a sequence that can be d ...
- 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 ...
- gridview的编辑,更新,取消,自动分页等
gridview编辑列,把左下角的"自动生成字段"的复选框的勾去掉 添加boundfield(绑定列)将其datafield设置为productname,headertext设置为 ...
- D3_book 7 area
<!-- area的例子csv使用node.js提供的 --> <!DOCTYPE html> <meta charset="utf-8"> & ...
- Window 64bit环境搭建Web Starter Kit
最近在学习https://developers.google.com/web/fundamentals/这里的内容,其中就有一部分是安装Web Starter Kit的教程,我总结一下自己的安装过程. ...
- MySQL Route负载均衡与读写分离Docker环境使用
Docker环境描述 主机名 部署服务 备注 MySQL Route MySQL Route 部署在宿主机上的MySQL Route服务 MySQL Master1 MySQL 5.7.16 Dock ...
- apache模块 合并多个js/css 提高网页加载速度
win : http://blog.csdn.net/mycwq/article/details/9361117 linux :http://blog.csdn.net/mycwq/article/ ...
- 微信公众平台如何与Web App结合?
Web App简而言之就是为移动平台而优化的网页,它可以表现得和原生应用一样,并且克服了原生应用一些固有的缺点.一般而言Web App最大的入口是浏览器,但现在微信公众平台作为新兴的平台,结合其内置浏 ...
- DBCC--常用跟踪标记
使用DBCC TRACEON 和DBCC TRACEOFF来打开和关闭跟踪标记 使用DBCC TRACESTATUS来查看所有打开的跟踪标记 --260:打印关于扩展存储过程动态链接库的版本信息 -- ...
- jzoj5996
我們可以枚舉每一個串的最短回文後綴,這樣一定不會算重. 雖然一個字符串可能會有多個回文後綴,但是答案只會在最短的後綴被計算 記f[i]表示長度為i回文串中,沒有長度>1的回文後綴的個數,將總個數 ...