欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java通過(guò)Callable實(shí)現(xiàn)多線程

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

Callable實(shí)現(xiàn)多線程

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

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

思路:

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

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

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

(3)獲取result.get();

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

下面是一個(gè)小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;//延時(shí)時(shí)間
    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通過(guò)Callable實(shí)現(xiàn)多線程的文章就介紹到這了,更多相關(guān)Callable實(shí)現(xiàn)多線程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)電話本系統(tǒng)

    java實(shí)現(xiàn)電話本系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)電話本系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 詳解java中的PropertyChangeSupport與PropertyChangeListener

    詳解java中的PropertyChangeSupport與PropertyChangeListener

    這篇文章主要介紹了詳解java中的PropertyChangeSupport與PropertyChangeListener的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • IntelliJ IDEA 無(wú)法正常使用SVN的問(wèn)題和完美解決辦法

    IntelliJ IDEA 無(wú)法正常使用SVN的問(wèn)題和完美解決辦法

    這篇文章主要介紹了IntelliJ IDEA 無(wú)法正常使用SVN的問(wèn)題和解決辦法,本文給大家分享完美解決方案,通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 最新評(píng)論