溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java創(chuàng)建線程的方式實(shí)例分析

發(fā)布時(shí)間:2022-07-28 13:48:13 來(lái)源:億速云 閱讀:88 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Java創(chuàng)建線程的方式實(shí)例分析”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java創(chuàng)建線程的方式實(shí)例分析”吧!

繼承Thread,這里使用匿名內(nèi)部類

@Slf4j(topic = "c.Test1")
public class Test1 {
    public static void main(String[] args) {
        //創(chuàng)建線程對(duì)象
        Thread t = new Thread(){
            @Override
            public void run() {
                //要執(zhí)行的任務(wù)
                log.debug("running");
            }
        };
        //設(shè)置線程的名字
        t.setName("t1");
        //啟動(dòng)線程
        t.start();
        log.debug("running");
    }
}
/*
19:44:31.998 [main] DEBUG c.Test1 - running
19:44:31.998 [t1] DEBUG c.Test1 - running
*/

實(shí)現(xiàn)Runnable接口,配合Thread類,同樣用匿名內(nèi)部類

  • 把線程和任務(wù)分開

  • Thread表示線程

  • Runnable代表可運(yùn)行的任務(wù)

@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                //要執(zhí)行的任務(wù)
                log.debug("running");
            }
        };
        //創(chuàng)建線程對(duì)象
        Thread t = new Thread(runnable, "t2");
        //啟動(dòng)線程
        t.start();
    }
}
//19:52:27.646 [t2] DEBUG c.Test2 - running

在javajava中,有@FunctionalInterface@FunctionalInterface注解意味著該接口只有一個(gè)抽象方法,即可以用lambdalambda表達(dá)式的方式簡(jiǎn)化

@Slf4j(topic = "c.Test2")
public class Test2 {
    public static void main(String[] args) {
        Runnable runnable = () -> {
            //要執(zhí)行的任務(wù)
            log.debug("running");
        };
        //創(chuàng)建線程對(duì)象
        Thread t = new Thread(runnable, "t2");
        //啟動(dòng)線程
        t.start();
    }
}

FutureTask配合Thread

因?yàn)镕utureTask可以接口一個(gè)Callable類型的參數(shù),用來(lái)處理有返回值的情況

@Slf4j(topic = "c.Test3")
public class Test3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //創(chuàng)建任務(wù)對(duì)象
        FutureTask<Integer> task = new FutureTask<>(() -> {
            log.debug("running");
            Thread.sleep(1000);
            return 100;
        });
        /*
        用lambda化簡(jiǎn)前
         */
        FutureTask<Integer> task1 = new FutureTask<>(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                log.debug("running");
                Thread.sleep(1000);
                return 100;
            }
        });
        //參數(shù)1是任務(wù)的對(duì)象, 參數(shù)2是線程的名字
        Thread t = new Thread(task, "t3");
        t.run();
        //主線程堵塞,同步等待task執(zhí)行完畢的結(jié)果
        Integer integer = task.get();
        log.debug("結(jié)果是:{}", integer);
    }
}

到此,相信大家對(duì)“Java創(chuàng)建線程的方式實(shí)例分析”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI