从线程中产生返回值--Callable接口

Runnable是执行工作的独立线程,但是它不返回任何值。如果你希望线程在完成时能够返回一个值,那么可以实现Callable接口而不是Runnable接口。在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示的是从方法call()(而不是run())中返回的值,并且必须使用ExecutorService.submit()方法调用它。

线程代码:

public class ResulttThread implements Callable<String> {

    private int id;

    public ResulttThread(int id) {
        this.id = id;
    }

    @Override
    public String call() throws Exception {
        return "The result id is " + id;
    }
}

调用代码:

 Future<String> future;
 ExecutorService mService = Executors.newCachedThreadPool();
    for (int i = 0; i < 5; i++) {
       future = mService.submit(new ResulttThread(i));
       System.out.println(future.get());
    }

运行结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 18:06:23

从线程中产生返回值--Callable接口的相关文章

Java线程中带有返回值的线程Callable

在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了.现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口. 执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了. 下面是个很简单的例子: package com.lyc import java.util.co

java多线程之从任务中获取返回值

package wzh.test; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; class TaskWithResult implements Callable<Strin

鼠标左中右键返回值的兼容性问题

标准浏览器下鼠标左中右键返回值分别是0,1,2,但是IE8及以下版本浏览器返回的却是1,4,2,兼容代码如下 document.onmousedown = function(event){ alert(getButton(event)); } function getButton(event){ evt = event || window.event; if(event){ return event.button; }else{ switch(evt.button){ case 1: retur

Asp.net MVC 中Controller返回值类型ActionResult

内容转自 http://blog.csdn.net/pasic/article/details/7110134 Asp.net MVC中Controller返回值类型 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必须是一个public方法 必须是实例方法 没有标志NonActionAttribute特性的(NoAction) 不能被重载 必须返回ActionResult类型 如: [csharp] view pl

获取存储过程返回值及代码中获取返回值

获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;BEGININSERT INTO [Order](o_buyerid )VALUES (@o_buyerid )SET @o_id = @@IDENTITYENDEND 存储过程中获得方法: D

golang中省略返回值造成内存泄漏

我已经两次因为不恰当的省略go中的函数返回值,一次造成MySql的too many connection错误,一次造成严重的内存泄漏.所以在这里大家分享一下这个问题和解决办法,也提醒自己以后不要再犯类似的错了. 众所周知,go中的函数可以返回多个值.但很多时候我们并不需要所有的值,而且go中定义了一个变量必须使用才可以,不然会报错.所以对于不需要的返回值,一般的操作方法就是省略: for _,value := range slice{ //.... } 一个典型就是上面的range.range可

robot framework中的返回值

1.若想要再setup中有返回值,给后续的操作使用 A)在setup的关键词中需要的返回值,设置为global variable或者suit variable:如下图:但是在编译器中,会报错,但是执行之后会正常输出. 2)在关键词中的返回值,使用[return],使用该关键词,然后给返回值赋值为一个变量,该变量即可使用 3)若需要返回值不止一个,除了方法1中,将所有需要使用的值设置为全局变量之外,可以修改方法2 原文地址:https://www.cnblogs.com/xiaodouzhou-1

js中return返回值小练习

本文只是帮助初学者入门用的 关于js中的返回值return 如果函数中存在return,执行到了那行之后就直接跳出整个函数,接着向下执行 上例子 定义一个函数是否是偶数,如果是返回true,如果不是返回false? 我相信大多数才学的人会这样写 function isOu(num){ if(num%2==0){ return true }else{ return false } } 这样写不是不可以,只是有点啰嗦 因为num%2==0本身就是一个判断,所以 function isOu(num){

线程池的应用及Callable接口的使用

Java代码   public interface Executor { /** * Executes the given command at some time in the future.  The command * may execute in a new thread, in a pooled thread, or in the calling * thread, at the discretion of the <tt>Executor</tt> implementa