java多线程返回函数结果
来源:互联网 发布:net.sf.json官方下载 编辑:程序博客网 时间:2024/06/14 04:39
两种方式:一种继承Thread类实现;一种通过实现Callable接口。
第一种方法:
因为实现Thread类的run方法自身是没有返回值的,所以不能直接获得线程的执行结果,但是可以通过在run方法里把最后的结果传递给实例变量,然后通过getXX方法获取该实例变量的值。继承实现的代码:
- class RunThread extends Thread{
- private String runLog;
- private BufferedReader br;
- {
- runLog = "";
- }
- public RunThread(BufferedReader br){
- this.br = br;
- }
- public void run() {
- try {
- String output = "";
- while ((output = br.readLine()) != null) {
- this.runLog += output + "\n";
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public String getRunLog(){
- return this.runLog;
- }
- }
第二种方法:
继承Callable接口后需要实现call方法,而call方法默认是可以有返回值的,所以可以直接返回想返回的内容。接口的实现代码:
- class CallThread implements Callable<String>{
- private String runLog;
- private BufferedReader br;
- {
- runLog = "";
- }
- public CallThread(BufferedReader br){
- this.br = br;
- }
- @Override
- public String call() throws Exception {
- try {
- String output = "";
- while ((output = br.readLine()) != null) {
- runLog += output + "\n";
- }
- } catch (IOException e) {
- return runLog;
- }
- return runLog;
- }
- }
下面就来调用了。
第一种方式的调用代码:
- RunThread th1 = new RunThread(standout);
- th1.start();
- RunThread th2 = new RunThread(standerr);
- th2.start();
- th2.join(); //保障前面2个线程在主进程之前结束,否则获取的结果可能为空或不完整
- runLog += th1.getRunLog() + "\n";
- runLog += th2.getRunLog() + "\n";
第二种方式的调用代码:
- ExecutorService exs = Executors.newCachedThreadPool();
- ArrayList<Future<String>> al = new ArrayList<Future<String>>();
- al.add(exs.submit(new CallThread(standout)));
- al.add(exs.submit(new CallThread(standerr)));
- for(Future<String> fs:al){
- try {
- runLog += fs.get() + "\n";
- } catch (InterruptedException e) {
- e.printStackTrace();
- } catch (ExecutionException e) {
- e.printStackTrace();
- }
- }
0 0
- java多线程返回函数结果
- java多线程返回函数结果
- java多线程返回函数结果
- Java多线程返回结果2 FutureTask
- java调用ORACLE函数返回结果集
- java 调用oracle函数返回结果集
- java多线程Future、FutureTask使用示例,返回异步的结果
- java多线程Future、FutureTask使用示例,返回异步的结果
- 多线程信号返回测试结果
- 多线程 : 使用 CompletionService 多线程返回结果
- Oracle函数返回游标,在JAVA中显示结果
- 函数如何返回结果集
- postgresql 函数返回结果集
- postgresql 函数返回结果集
- Java 多线程 Executor 线程池 从线程返回结果 Java编程思想读书笔记
- 多线程主线程接受返回结果
- 多线程 : 使用 Future 获取线程返回结果
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- 系统小知识:确保Windows电脑系统稳定、运行流畅的六个秘笈
- c++智能指针
- 关于Eclipse不能在线更新ADT问题
- 为什么Linux不需要磁盘碎片整理
- Makefile宏定义
- java多线程返回函数结果
- 操作轻松自如,Windows 7运行命令一览
- 深入理解Handler消息传递机制详解
- CLRS 2.3 c++实现
- ubuntu 12.04 下编译 android vlc(libvlc) 小结:
- 禁用WindowsVista企业安装的命令提示
- 黑马程序员——Java基础---集合(概述、List及子类、Set及HashSet)--第14天--第166-179集
- 三十六.串口控制台
- 优化Vista部分建议和升级注意事项