最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java通過Callable實現(xiàn)多線程

 更新時間:2023年10月13日 11:10:46   作者:kongshuchen  
這篇文章主要介紹了Java通過Callable實現(xiàn)多線程,Callable的任務(wù)執(zhí)行后可返回值,運行Callable任務(wù)可以拿到一個Future對象,Future表示異步計算的結(jié)果,它提供了檢查計算是否完成的方法,以等待計算的完成,并檢查計算的結(jié)果,需要的朋友可以參考下

Callable實現(xiàn)多線程

在java.util.concurrent包下,相比較于通過實現(xiàn)Runnable接口的run方法來實現(xiàn)多線程,優(yōu)點在于可以有返回值,可以拋出異常,因為run方法是void的,并且不能拋出異常,但是Callable的方式缺點在于較為繁瑣。

Callable的任務(wù)執(zhí)行后可返回值,運行Callable任務(wù)可以拿到一個Future對象。Future表示異步計算的結(jié)果。它提供了檢查計算是否完成的方法,以等待計算的完成,并檢查計算的結(jié)果。通過Future對象可以了解任務(wù)的執(zhí)行情況,可以取消任務(wù)的執(zhí)行,還可以獲取任務(wù)的執(zhí)行結(jié)果。

思路:

(1)創(chuàng)建Callable實現(xiàn)類+重寫call方法;

(2)借助執(zhí)行調(diào)度服務(wù)ExecutorService,獲取Future對象

ExecutorService ser = Executors.newFixedThreadPool(2);
Future result = ser.submit(實現(xiàn)類對象)

(3)獲取result.get();

(4)停止服務(wù)ser.shutdownNow();

下面是一個小demo,龜兔賽跑的例子:

package multi_Thread;
import java.util.concurrent.*;
/**
 * 使用Callable創(chuàng)建線程
 * Created by dd on 2016/6/4 0004.
 */
public class demo01 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        創(chuàng)建線程
        ExecutorService ser = Executors.newFixedThreadPool(2);
        Race tortoise = new Race("烏龜",1000);
        Race rabbit = new Race("兔子",500);
        Future<Integer> result1 = ser.submit(tortoise);
        Future<Integer> result2 = ser.submit(rabbit);
        Thread.sleep(2000);
        tortoise.setFlag(false);
        rabbit.setFlag(false);
//        獲取值
        Integer num1 = result1.get();
        Integer num2 = result2.get();
        System.out.println("烏龜"+num1);
        System.out.println("兔子"+num2);
//        停止服務(wù)
        ser.shutdownNow();
    }
}
class Race implements Callable<Integer>{
    private String name;//名稱
    private long time;//延時時間
    private boolean flag = true;
    private int step = 0;
    public Race() {
    }
    public Race(String name) {
        super();
        this.name = name;
    }
    public Race(String name, long time) {
        super();
        this.name = name;
        this.time = time;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public long getTime() {
        return time;
    }
    public void setTime(long time) {
        this.time = time;
    }
    public boolean isFlag() {
        return flag;
    }
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    public int getStep() {
        return step;
    }
    public void setStep(int step) {
        this.step = step;
    }
    @Override
    public Integer call() throws Exception {
        while (flag){
            Thread.sleep(time);
            step++;
        }
        return step;
    }
}

到此這篇關(guān)于Java通過Callable實現(xiàn)多線程的文章就介紹到這了,更多相關(guān)Callable實現(xiàn)多線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

广元市| 泊头市| 游戏| 乌兰县| 南雄市| 同心县| 临城县| 湘西| 临泉县| 石嘴山市| 资源县| 定结县| 松江区| 灵川县| 桃源县| 阜阳市| 苏尼特左旗| 安徽省| 清新县| 阳新县| 湖州市| 内黄县| 林州市| 新民市| 东海县| 嘉定区| 富平县| 林芝县| 南宁市| 厦门市| 青冈县| 文安县| 阿城市| 鲜城| 德江县| 广元市| 罗源县| 贞丰县| 佛冈县| 闻喜县| 婺源县|