成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過線程池方式改造Stream.parallel()并行流

開發 后端
單線程池newSingleThreadExecutor(),只有一個核心線程的線程池,保證任務按FIFO順序一個個執行;固定線程數線程池newFixedThreadPool(10),固定數量的可復用的線程數,來執行任務。當線程數達到最大核心線程數,則加入隊列等待有空閑線程時再執行。

大家好,我是哪吒。

上一篇簡單聊一聊公平鎖和非公平鎖,parallel并行流,提到了一個IntStream.rangeClosed并行流問題,很多小伙伴,對這個比較陌生,想用線程池的方式改造一下。

一、IntStream.rangeClosed并行流

@Data
public class LockTest1 {
    public static void main(String[] args) {
        IntStream.rangeClosed(1, 100000).parallel().forEach(i -> new LockTest1().increase());
        System.out.println(time);
    }

    private static int time = 0;

    private static Object lock = new Object();
    public void increase() {
        synchronized (lock) {
            time++;
        }
    }
}

二、線程池方式改造

不會那些新特性,還是原始的香啊,寫起代碼,得心應手。

1、創建線程池

這時候,有些小伙伴,又陷入了選擇恐懼癥。用哪個線程池比較好呢?

簡單回顧一下:

  • 單線程池newSingleThreadExecutor(),只有一個核心線程的線程池,保證任務按FIFO順序一個個執行;
  • 固定線程數線程池newFixedThreadPool(10),固定數量的可復用的線程數,來執行任務。當線程數達到最大核心線程數,則加入隊列等待有空閑線程時再執行;
  • 可緩存線程池newCachedThreadPool(),創建的都是非核心線程,而且最大線程數為Interge的最大值,空閑線程存活時間是1分鐘。如果有大量耗時的任務,則不適該創建方式,它只適用于生命周期短的任務;
  • 固定線程數newScheduledThreadPool(10),支持定時和周期性任務newScheduledThreadPool(10),顧名思義,在固定線程數的前提下,添加了定時任務。

最常用的還是固定線程數線程池newFixedThreadPool(10)。

@Data
public class LockTest2 {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(200);
        for (int i = 0; i < 100000; i++) {
            Thread0926 thread = new Thread0926();
            executorService.execute(thread);
        }
        System.out.println(time);
    }

    private static int time = 0;
    private static Object lock = new Object();
    public void increase() {
        synchronized (lock) {
            time++;
        }
    }
}

2、線程類

public class Thread0926 implements Runnable{
    @Override
    public void run() {
        LockTest2 lockTest = new LockTest2();
        lockTest.increase();
    }
}

3、信心滿滿,走起來

我草,這不對啊,不應該是100000嘛?又把老子整不會了~

三、再次解決并發時i++原子性問題

上一篇測試過,使用synchronized代碼塊是可以解決i++線程安全問題的,這次怎么不好使了?

上面的代碼中,synchronized (lock)鎖住了time++,lock是靜態變量,所以屬于類級別的鎖。但是新建的線程是一個新的類,超出了鎖的范圍,所以失效。

那么,在當前類中,開啟線程,是不是就可以了呢?試一下

public class LockTest4 {
    private static int time = 0;
    private static Object lock = new Object();
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 200; i++) {
            Thread thread = new Thread(() -> {
                for (int j = 0; j < 500; j++) {
                    synchronized (lock) {
                        time++;
                    }
                }
            });
            thread.start();
        }
        Thread.sleep(3000);
        System.out.println(time);
    }
}

當然,在synchronized代碼塊中,使用synchronized (LockTest4.class)也是可以的,效果是一樣的。

四、并行流與多線程

并行流的本質的是并行,多線程的本質是并發。

并行指當多核CPU中的一個CPU執行一個線程時,其它CPU能夠同時執行另一個線程,兩個線程之間不會搶占CPU資源,可以同時運行。

并發指在一段時間內CPU處理多個線程,這些線程會搶占CPU資源,CPU資源根據時間片周期在多個線程之間來回切換,多個線程在一段時間內同時運行,而在同一時刻不是同時運行的。

1、并行和并發的區別?

  • 并行指多個線程在一段時間的每個時刻都同時運行,并發指多個線程在一段時間內同時運行(不是同一時刻,一段時間內交叉執行)。
  • 并行的多個線程不會搶占系統資源,并發的多個線程會搶占系統資源。
  • 并行是多CPU的產物,單核CPU中只有并發,沒有并行。

2、并行和并發的使用場景

(1)IO密集場景

場景應用程序開發,提供http接口、數據庫查詢、微服務調用都是IO請求,IO請求時幾乎不消耗cpu,這是為了提供cup使用率,建議使用多線程并發,線程數可以遠大于cpu核數。

(2)cup密集場景

對應大量的加減乘除運算、md5、hash等運算操作,需要持續使用cpu,需要讓多核cpu并行運算,適合使用forkjoin并行計算

技術場景多線程不足,使用多線程技術,也能提高性能,但是線程設置過大會浪費cpu線程切換的時間,如果線程任務分配不均勻,會導致有的cpu忙碌有的cpu空閑。

責任編輯:姜華 來源: 哪吒編程
相關推薦

2024-04-19 08:28:57

JavaAPI場景

2023-10-07 08:17:40

公平鎖非公平鎖

2024-01-17 12:44:23

Python并發編程

2023-01-05 08:27:04

Stream執行流程

2015-10-13 09:18:00

.Net編程教程

2011-03-24 09:23:43

.NET 4多核并行

2021-06-05 06:49:54

LibuvN-API進程

2023-08-02 08:03:08

Python線程池

2021-11-30 00:12:43

C#多線程循環

2010-03-11 15:23:44

Visual Stud

2024-04-07 09:04:18

Parallel 類編程工具.NET

2021-08-09 19:01:36

并行場景程序

2023-11-07 12:00:41

數據并行Java 8數據

2025-02-12 08:07:40

2010-03-19 13:17:26

Parallel

2025-05-22 04:00:00

PARSCALE大型語言模型LLM

2023-05-19 08:01:24

Key消費場景

2025-02-24 08:00:00

線程池Java開發

2024-10-31 09:30:05

線程池工具Java

2023-09-29 08:53:30

線程池java函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人妇女免费播放久久久 | 日韩精品成人免费观看视频 | 一级黄色片免费 | 亚洲国产自产 | 欧美日韩一| 日韩免费高清视频 | www.精品一区 | 超碰日本 | 欧美一区二区三区在线观看 | 亚洲国产精品第一区二区 | 91久久国产综合久久 | 久久国产精品久久国产精品 | 久久国产精品72免费观看 | 亚洲欧美精品国产一级在线 | 欧美精品日韩精品国产精品 | 欧美一区二区 | 欧美成人a∨高清免费观看 色999日韩 | 久久综合一区 | 最新中文字幕一区 | 日韩欧美综合 | 久久国产精品-国产精品 | 亚洲在线成人 | 中文一区 | 久久精品欧美一区二区三区麻豆 | 亚洲网站在线播放 | 欧美lesbianxxxxhd视频社区 | 国产91丝袜在线播放 | 91精品久久久久 | 国产婷婷精品av在线 | 在线欧美激情 | 中文字幕免费在线 | 国产激情自拍视频 | 久久久蜜桃一区二区人 | 欧美一区二区三区四区视频 | 午夜精品一区二区三区在线视频 | 欧美黑人一级爽快片淫片高清 | 欧美a∨| 国产精品欧美一区二区三区 | 中文字幕高清 | 精品综合在线 | 一区二区三区在线 |