溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java創建線程的方式實例分析

發布時間:2022-07-28 13:48:13 來源:億速云 閱讀:137 作者:iii 欄目:開發技術

本篇內容主要講解“Java創建線程的方式實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java創建線程的方式實例分析”吧!

繼承Thread,這里使用匿名內部類

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

實現Runnable接口,配合Thread類,同樣用匿名內部類

  • 把線程和任務分開

  • Thread表示線程

  • Runnable代表可運行的任務

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

在javajava中,有@FunctionalInterface@FunctionalInterface注解意味著該接口只有一個抽象方法,即可以用lambdalambda表達式的方式簡化

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

FutureTask配合Thread

因為FutureTask可以接口一個Callable類型的參數,用來處理有返回值的情況

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

到此,相信大家對“Java創建線程的方式實例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女