91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

java中多線程與線程池怎么用

發布時間:2021-09-13 13:01:59 來源:億速云 閱讀:195 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關java中多線程與線程池怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

繼承Thread

繼承Thread去執行任務,確實可以開啟一個線程去執行任務,如果經常的去開啟一些線程,也會導致系統資源的浪費。

public static class Mythread extends Thread{
        @Override
        public void run() {
            System.out.println("當前線程"+Thread.currentThread().getId());
            int i = 10/2;
            System.out.println("運行結果"+i);
        }
    }
//調用線程。
public static void main(String[] args) throws ExecutionException, InterruptedException {
        /**thread執行方式*/
        Mythread mythread = new Mythread();
        mythread.start();//啟動線程
        System.out.println("main--end");
}

實現Runnale接口

public static class MyRunable implements Runnable {

    @Override
    public void run() {
        System.out.println("當前線程"+Thread.currentThread().getId());
        int i = 10/2;
        System.out.println("運行結果"+i);

    }
}

調用。

/**
 * runable的啟動方式
 */

MyRunable runable = new MyRunable();
new Thread(runable).start();
System.out.println("main--end");

Callable

/**
 * Callable可以允許有返回值
 */

public static class Callale01 implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("當前線程"+Thread.currentThread().getId());
        int i = 10/2;
        System.out.println("運行結果"+i);
        return i;
    }
}

調用。這里需要用callable構建futureTask

/**
 * callale的啟動方式
 */
FutureTask<Integer> futureTask =new FutureTask<>(new Callale01());
//取返回結果。
Integer i = futureTask.get();
new Thread(futureTask).start();
System.out.println("返回結果是:"+i);

線程池

線程池才是我們java開發中,經常用到一種開啟多線程的方式,線程池,自己去管理線程。可以節省系統資源。通常我們會將下面的一些配置寫在一些配置類中

/**
 * 七大參數
 * corePoolSize: 1.核心線程數[一直存在]: 線程池創建好了以后。就準備就緒的線程數量。
 * maxinumPoolSize: 2 最大線程數量
 * keepaliveTime: 存活時間。空閑線程的最大的等待時間。
 * unit  等待時間的單位
 * blockingQueue 阻塞隊列。如果任務很多就會放在隊列里面,只要有線程空閑了,就會去隊列里面去取。
 * threadFactory :線程的工廠。
 * RejectExecutionHandler :如果隊列滿了。按照我們指定的策略。拒絕執行任務。
 *
 */
 ThreadPoolExecutor executor = new ThreadPoolExecutor(5,100,10,TimeUnit.SECONDS,
          new LinkedBlockingQueue<>(100),
                                                    Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

常見的4種線程池。

1 newCachedThreadPool()

創建一個可緩存的線程池,如果線程池長度超過了處理的需要,可靈活的回收空閑線程。若無可回收。則創建新線程。

Executors.newCachedThreadPool();

2.newFixedThreadPool(6)

創建一個固定大小的線程池。

3 newScheduledThreadPool()

定時任務的線程池。

4.newSingleThreadExecutor()

Executors.newSingleThreadExecutor();

感謝各位的閱讀!關于“java中多線程與線程池怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

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

AI

留坝县| 墨江| 淮滨县| 保定市| 霍山县| 大邑县| 济阳县| 文水县| 布拖县| 滕州市| 阳原县| 牟定县| 塔河县| 甘肃省| 云安县| 静海县| 栾川县| 宜兰市| 金坛市| 三台县| 靖州| 桐城市| 洪雅县| 米泉市| 博野县| 星子县| 栖霞市| 南乐县| 界首市| 肃宁县| 娱乐| 沙田区| 朝阳县| 杨浦区| 新源县| 安乡县| 凤阳县| 泾源县| 岳阳县| 民和| 永平县|