Java線程中帶有傳回值的線程Callable

來源:互聯網
上載者:User

標籤:

在Java5之前,線程是沒有傳回值的,常常為了“有”傳回值,破費周折,而且代碼很不好寫。或者乾脆繞過這道坎,走別的路了。現在Java終於有可傳回值的任務(也可以叫做線程)了。

可傳回值的任務必須實現Callable介面,類似的,無傳回值的任務必須Runnable介面。

執行Callable任務後,可以擷取一個Future的對象,在該對象上調用get就可以擷取到Callable任務返回的Object了。

下面是個很簡單的例子:

package com.lyc

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 CallableFutureTest {


    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CallableFutureTest test = new CallableFutureTest();
       
        // 建立一個線程池
        ExecutorService pool = Executors.newFixedThreadPool(2);
        // 建立兩個有傳回值的任務
        Callable c1 = test.new MyCallable("A");
        Callable c2 = test.new MyCallable("B");
       
        // 執行任務並擷取Future對象
        Future f1 = pool.submit(c1);
        Future f2 = pool.submit(c2);
       
        // 從Future對象上擷取任務的傳回值,並輸出到控制台
        System.out.println("----" + f1.get().toString());
        System.out.println("----" + f2.get().toString());
       
        // 關閉線程池
        pool.shutdown();
    }

    class MyCallable implements Callable {
        private String oid;

        MyCallable(String oid) {
            this.oid = oid;
        }

        public Object call() throws Exception {
            return oid + "任務返回的內容";
        }
    }
}

Java線程中帶有傳回值的線程Callable

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.