java 线程中的值如何返回

java线程publicvoidrun()中值如何返回... java 线程public void run()中值如何返回 展开
 我来答
千锋教育
2015-12-15 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部

如果是java5的话,那么Java5新增了Callable接口获得线程的返回值,用法如下

package com.ronniewang;  
  
  
import java.util.concurrent.Callable;  
import java.util.concurrent.ExecutionException;  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
import java.util.concurrent.Future;  
  
  
public class GetReturnValueFromCallable {  
  
  
    private static final int SLEEP_MILLS = 3000;  
  
  
    private static final int SECOND_MILLS = 1000;  
  
  
    private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;  
  
  
    ExecutorService executorService = Executors.newCachedThreadPool();  
  
  
    /** 
     * 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable 
     */  
    public static void main(String[] args) {  
  
  
        new GetReturnValueFromCallable().testCallable();  
    }  
  
  
    private void testCallable() {  
  
  
        /** 
         * Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定, 
         * Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象 
         */  
        Future<String> future = executorService.submit(new Callable<String>() {  
  
  
            public String call() throws Exception {  
  
  
                Thread.sleep(SLEEP_MILLS);  
                return "I from callable";  
            }  
        });  
  
  
        while (true) {  
            /** 
             * 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值, 
             * 如果直接调用get()方法,get()方法将阻塞值线程结束 
             */  
            if (future.isDone()) {  
                try {  
                    System.out.println(future.get());  
                    break;  
                } catch (InterruptedException e) {  
                    // ignored  
                } catch (ExecutionException e) {  
                    // ignored  
                }  
            }  
            else {  
                try {  
                    System.out.println("after " + sleepSeconds-- + " seconds, we will get future");  
                    Thread.sleep(SECOND_MILLS);  
                } catch (InterruptedException e) {  
                    // ignored  
                }  
            }  
        }  
    }  
}  
package com.ronniewang;


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;


public class GetReturnValueFromCallable {


    private static final int SLEEP_MILLS = 3000;


    private static final int SECOND_MILLS = 1000;


    private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;


    ExecutorService executorService = Executors.newCachedThreadPool();


    /**
     * 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable
     */
    public static void main(String[] args) {


        new GetReturnValueFromCallable().testCallable();
    }


    private void testCallable() {


        /**
         * Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定,
         * Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象
         */
        Future<String> future = executorService.submit(new Callable<String>() {


            public String call() throws Exception {


                Thread.sleep(SLEEP_MILLS);
                return "I from callable";
            }
        });


        while (true) {
            /**
             * 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值,
             * 如果直接调用get()方法,get()方法将阻塞值线程结束
             */
            if (future.isDone()) {
                try {
                    System.out.println(future.get());
                    break;
                } catch (InterruptedException e) {
                    // ignored
                } catch (ExecutionException e) {
                    // ignored
                }
            }
            else {
                try {
                    System.out.println("after " + sleepSeconds-- + " seconds, we will get future");
                    Thread.sleep(SECOND_MILLS);
                } catch (InterruptedException e) {
                    // ignored
                }
            }
        }
    }
}

输出结果:
after 3 seconds, we will get future
 after 2 seconds, we will get future
 after 1 seconds, we will get future
 I from callable
卫星3D看世界
2009-08-12 · TA获得超过909个赞
知道小有建树答主
回答量:461
采纳率:66%
帮助的人:169万
展开全部
先如一楼所示那样把值改变了,
然后在 run 方法方法中触发一些事件(如启动一个 Timer),再在让事件监听器函数返回那些被操作大的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
万盛一霸
推荐于2017-11-22 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:56.6万
展开全部
public class A implements java.lang.Runnable{
private Object obj;
//obj将是你要从run()方法返回的参数
public void run(){
//操作obj
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
alphadao
2009-08-12 · TA获得超过822个赞
知道小有建树答主
回答量:487
采纳率:0%
帮助的人:418万
展开全部
在run()后面写一些get的方法阿。
前面申明一些函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式