日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

JUC并发编程学习笔记(六)Callable(简单)

發(fā)布時(shí)間:2023/11/3 C# 59 coder
生活随笔 收集整理的這篇文章主要介紹了 JUC并发编程学习笔记(六)Callable(简单) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Callable(簡(jiǎn)單)

callable接口和runnable接口類似,都是為了執(zhí)行另外一條線程而設(shè)計(jì)的,區(qū)別是Runnable不會(huì)返回結(jié)果也不會(huì)拋出異常。

1、可以有返回值

2、可以拋出異常

3、方法不同;run()/call();

Runnable

實(shí)現(xiàn)Runnable接口,重寫run方法,無返回值

//原線程
class RunnableThread implements Runnable{
    @Override
    public void run() {

    }
}

Callable

實(shí)現(xiàn)Callable接口,重寫call方法,有返回值,可在實(shí)現(xiàn)接口時(shí)設(shè)定

//callable線程
class CallableThread implements Callable<String>{

    @Override
    public String call() throws Exception {
        return null;
    }
}

Callable中泛型的參數(shù)等于方法的返回類型

啟動(dòng)callable

Thread類中沒有填入callable接口的重載方法,所以我們需要通過適配類完成操作

通過查找Runnable接口的實(shí)現(xiàn)類,能夠發(fā)現(xiàn)有一個(gè)FutureTask中提供了Callable參數(shù)的構(gòu)造方法

所以,可以通過FutureTask來作為一個(gè)中間人的角色使用線程運(yùn)行callable的實(shí)現(xiàn)類。

具體代碼

package org.example.callable;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableTest {
    public static void main(String[] args) {
//        new Thread(()->{new Runnable()}).start();
//        new Thread(()->{new FutureTask<V>()}).start();
//        new Thread(()->{new FutureTask<V>( Callable )}).start();
        CallableThread thread = new CallableThread();//怎樣啟動(dòng)Callable

        FutureTask task = new FutureTask(thread);//適配類
        new Thread(task,"A").start();//正常打印兩個(gè)call,但是這邊只會(huì)打印一個(gè),結(jié)果會(huì)被緩存,提高效率
        new Thread(task,"B").start();
        try {
            String  o = (String) task.get();//get方法可能產(chǎn)生阻塞,耗時(shí)操作時(shí);通過異步操作或者將它放在最后使用
            System.out.println(o);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } catch (ExecutionException e) {
            throw new RuntimeException(e);
        }

    }
}

//callable線程
class CallableThread implements Callable<String>{

    @Override
    public String call() throws Exception {
        System.out.println("call");
        return "cals";
    }
}

細(xì)節(jié)

1、為了提高效率所以有緩存

2、耗時(shí)操作時(shí),獲取callable的返回值可能會(huì)產(chǎn)生對(duì)該方法調(diào)用實(shí)例的線程阻塞

總結(jié)

以上是生活随笔為你收集整理的JUC并发编程学习笔记(六)Callable(简单)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。