Java併發編程(五)建立線程方式概覽

Java極客  |  做者  /  鏗然一葉
這是Java極客的第 33 篇原創文章

如下簡述建立線程的幾種方式,不深刻展開,瞭解則可。java

1、實現Runnable接口


1.業務類實現Runnable接口
2.Thread類注入業務類並啓動
代碼以下:

public class RunnableDemo {
    public static void main(String[] args) {
        //Thread構造器注入實現類並啓動
        new Thread(new RunnableWorker()).start();
    }
}

//實現Runnable接口
class RunnableWorker implements Runnable {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
}
複製代碼

2、繼承Thread類


業務類繼承Thread,可直接以線程方式運行。代碼以下:

public class ThreadDemo extends Thread {

    public static void main(String[] args) {
        new ThreadDemo().start();
    }
    
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
}
複製代碼

3、實現Callable接口


業務類能夠實現Callable接口或者Runnable接口,兩者的區別是Callable執行完後有返回值,Runnable沒有返回值。
代碼以下:

public class FutureDemo {
    public static void main(String[] args) {
        FutureTask<Integer> task = new FutureTask(new CallableWorker());

        new Thread(task).start();

        try {
            System.out.println(task.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

class CallableWorker implements Callable<Integer> {

    public Integer call() throws Exception {
        return 10;
    }
}
複製代碼

4、Executors構建


業務類能夠實現Callable接口或者Runnable接口,兩者的區別是Callable執行完後有返回值,Runnable沒有返回值。
代碼以下:

public class ExecutorsDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //建立線程池
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        //提交匿名Callable
        Future<Integer> future = executorService.submit(new Callable<Integer>() {
            public Integer call() throws Exception {
                return 10;
            }
        });

        //獲取線程執行返回值
        System.out.println(future.get());
    }
}
複製代碼

end.編程


相關閱讀:
Java併發編程(一)知識地圖
Java併發編程(二)原子性
Java併發編程(三)可見性
Java併發編程(四)有序性
Java併發編程入門(六)synchronized用法
Java併發編程入門(七)輕鬆理解wait和notify以及使用場景
Java併發編程入門(八)線程生命週期
Java併發編程入門(九)死鎖和死鎖定位
Java併發編程入門(十)鎖優化
Java併發編程入門(十一)限流場景和Spring限流器實現
Java併發編程入門(十二)生產者和消費者模式-代碼模板
Java併發編程入門(十三)讀寫鎖和緩存模板
Java併發編程入門(十四)CountDownLatch應用場景
Java併發編程入門(十五)CyclicBarrier應用場景
Java併發編程入門(十六)秒懂線程池差異
Java併發編程入門(十七)一圖掌握線程經常使用類和接口
Java併發編程入門(十八)再論線程安全緩存


Java極客站點: javageektour.com/安全

相關文章
相關標籤/搜索