Java线程返回值/来自运行功能的数据

时间:2014-05-27 17:47:34

标签: java multithreading

我有一个疑问。如果我们谈论Java多线程,排除并发框架,那么我们如何从run()方法返回一个值。

我在一些采访中被问到这个问题并被问到如何在不使用可调用或并发框架的情况下执行此操作,即如何告诉主线程Thread1已完成某些执行(run()已完成)并且您可以更新UI。 / p>

编辑:这与标记为重复的问题不同,当前的问题询问您将如何使用runnable设计/编码以返回值。根据run()函数这是不可能的,但问的是如何通过runnable代码实现这种行为,以便可以通知/更新主线程?

我想这些是不同的问题。如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:0)

一种方法是在线程中设置一个值,等待线程结束,然后获取值。这是一个简单的,不是很好的编码示例,但您可以执行它。请注意使用相同对象(synchronized)的thread块。

public class Test { 

    private  int result;

    public static void main( String[] args) throws InterruptedException { 

        new Test().runTest();
    }

    private void runTest() throws InterruptedException {

        Thread thread = new Thread() {

            public void run() {

                System.out.println("Thread starts");

                try {
                    // some long operation in your thread
                    sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("Thread ends");

                // set the value you want to "produce" with your thread
                setResult(42);

                // notify waiting threads
                synchronized (this) {
                    notify();
                }
            }
        };

        // start your thread
        thread.start();

        // wait for it
        synchronized (thread) {
            thread.wait();
        }

        // now you got your result
        System.out.println("result = " + result);
    }

    void setResult(int value) {
        this.result = value;
    } 
}