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

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

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

Callable實現(xiàn)多線程

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

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

思路:

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

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

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

(3)獲取result.get();

(4)停止服務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);
//        停止服務
        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;
    }
}

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

相關文章

最新評論

德清县| 福安市| 肇州县| 太保市| 福州市| 皋兰县| 柘荣县| 岗巴县| 资阳市| 宿迁市| 斗六市| 黄浦区| 扎赉特旗| 怀来县| 噶尔县| 拜泉县| 云龙县| 祁阳县| 林芝县| 忻城县| 敦化市| 曲靖市| 宁武县| 全南县| 蓝田县| 遵化市| 冷水江市| 左权县| 天台县| 沅江市| 浑源县| 乐至县| 荥经县| 准格尔旗| 龙川县| 旺苍县| 南郑县| 苏尼特右旗| 岳普湖县| 大庆市| 营口市|