AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

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

來(lái)源: 責(zé)編: 時(shí)間:2023-10-13 14:36:41 240觀看
導(dǎo)讀大家好,我是哪吒。上一篇簡(jiǎn)單聊一聊公平鎖和非公平鎖,parallel并行流,提到了一個(gè)IntStream.rangeClosed并行流問題,很多小伙伴,對(duì)這個(gè)比較陌生,想用線程池的方式改造一下。一、IntStream.rangeClosed并行流@Datapublic clas

yKK28資訊網(wǎng)——每日最新資訊28at.com

大家好,我是哪吒。

上一篇簡(jiǎn)單聊一聊公平鎖和非公平鎖,parallel并行流,提到了一個(gè)IntStream.rangeClosed并行流問題,很多小伙伴,對(duì)這個(gè)比較陌生,想用線程池的方式改造一下。yKK28資訊網(wǎng)——每日最新資訊28at.com

一、IntStream.rangeClosed并行流

@Datapublic 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++;        }    }}

二、線程池方式改造

不會(huì)那些新特性,還是原始的香啊,寫起代碼,得心應(yīng)手。yKK28資訊網(wǎng)——每日最新資訊28at.com

1、創(chuàng)建線程池

這時(shí)候,有些小伙伴,又陷入了選擇恐懼癥。用哪個(gè)線程池比較好呢?yKK28資訊網(wǎng)——每日最新資訊28at.com

簡(jiǎn)單回顧一下:yKK28資訊網(wǎng)——每日最新資訊28at.com

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

最常用的還是固定線程數(shù)線程池newFixedThreadPool(10)。yKK28資訊網(wǎng)——每日最新資訊28at.com

@Datapublic 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、信心滿滿,走起來(lái)

我草,這不對(duì)啊,不應(yīng)該是100000嘛?又把老子整不會(huì)了~yKK28資訊網(wǎng)——每日最新資訊28at.com

yKK28資訊網(wǎng)——每日最新資訊28at.com

三、再次解決并發(fā)時(shí)i++原子性問題

上一篇測(cè)試過(guò),使用synchronized代碼塊是可以解決i++線程安全問題的,這次怎么不好使了?yKK28資訊網(wǎng)——每日最新資訊28at.com

上面的代碼中,synchronized (lock)鎖住了time++,lock是靜態(tài)變量,所以屬于類級(jí)別的鎖。但是新建的線程是一個(gè)新的類,超出了鎖的范圍,所以失效。yKK28資訊網(wǎng)——每日最新資訊28at.com

那么,在當(dāng)前類中,開啟線程,是不是就可以了呢?試一下yKK28資訊網(wǎng)——每日最新資訊28at.com

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);    }}

當(dāng)然,在synchronized代碼塊中,使用synchronized (LockTest4.class)也是可以的,效果是一樣的。yKK28資訊網(wǎng)——每日最新資訊28at.com

yKK28資訊網(wǎng)——每日最新資訊28at.com

四、并行流與多線程

并行流的本質(zhì)的是并行,多線程的本質(zhì)是并發(fā)。yKK28資訊網(wǎng)——每日最新資訊28at.com

并行指當(dāng)多核CPU中的一個(gè)CPU執(zhí)行一個(gè)線程時(shí),其它CPU能夠同時(shí)執(zhí)行另一個(gè)線程,兩個(gè)線程之間不會(huì)搶占CPU資源,可以同時(shí)運(yùn)行。yKK28資訊網(wǎng)——每日最新資訊28at.com

并發(fā)指在一段時(shí)間內(nèi)CPU處理多個(gè)線程,這些線程會(huì)搶占CPU資源,CPU資源根據(jù)時(shí)間片周期在多個(gè)線程之間來(lái)回切換,多個(gè)線程在一段時(shí)間內(nèi)同時(shí)運(yùn)行,而在同一時(shí)刻不是同時(shí)運(yùn)行的。yKK28資訊網(wǎng)——每日最新資訊28at.com

1、并行和并發(fā)的區(qū)別?

  • 并行指多個(gè)線程在一段時(shí)間的每個(gè)時(shí)刻都同時(shí)運(yùn)行,并發(fā)指多個(gè)線程在一段時(shí)間內(nèi)同時(shí)運(yùn)行(不是同一時(shí)刻,一段時(shí)間內(nèi)交叉執(zhí)行)。
  • 并行的多個(gè)線程不會(huì)搶占系統(tǒng)資源,并發(fā)的多個(gè)線程會(huì)搶占系統(tǒng)資源。
  • 并行是多CPU的產(chǎn)物,單核CPU中只有并發(fā),沒有并行。

yKK28資訊網(wǎng)——每日最新資訊28at.com

2、并行和并發(fā)的使用場(chǎng)景

(1)IO密集場(chǎng)景

場(chǎng)景應(yīng)用程序開發(fā),提供http接口、數(shù)據(jù)庫(kù)查詢、微服務(wù)調(diào)用都是IO請(qǐng)求,IO請(qǐng)求時(shí)幾乎不消耗cpu,這是為了提供cup使用率,建議使用多線程并發(fā),線程數(shù)可以遠(yuǎn)大于cpu核數(shù)。yKK28資訊網(wǎng)——每日最新資訊28at.com

(2)cup密集場(chǎng)景

對(duì)應(yīng)大量的加減乘除運(yùn)算、md5、hash等運(yùn)算操作,需要持續(xù)使用cpu,需要讓多核cpu并行運(yùn)算,適合使用forkjoin并行計(jì)算yKK28資訊網(wǎng)——每日最新資訊28at.com

技術(shù)場(chǎng)景多線程不足,使用多線程技術(shù),也能提高性能,但是線程設(shè)置過(guò)大會(huì)浪費(fèi)cpu線程切換的時(shí)間,如果線程任務(wù)分配不均勻,會(huì)導(dǎo)致有的cpu忙碌有的cpu空閑。yKK28資訊網(wǎng)——每日最新資訊28at.com

yKK28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-13282-0.html通過(guò)線程池方式改造Stream.parallel()并行流

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: C# Dev Kit for Visual Studio Code 用法詳解

下一篇: Java中equals和==的區(qū)別

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機(jī)一加Ace2 Pro帶來(lái)預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請(qǐng)期待。”同時(shí)
  • 十個(gè)簡(jiǎn)單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或類的行為。裝飾器本質(zhì)上是一個(gè)函數(shù),它接受另一個(gè)函數(shù)或類作為參數(shù),并返回一個(gè)新的函數(shù)或類。它們通常用
  • 從零到英雄:高并發(fā)與性能優(yōu)化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構(gòu)師或者程序員,你是否曾經(jīng)為公司的系統(tǒng)在面對(duì)高并發(fā)和性能瓶頸時(shí)感到手足無(wú)措或者焦頭爛額呢?筆者在出道那會(huì)為此是吃盡了苦頭的,不過(guò)也得
  • 一個(gè)注解實(shí)現(xiàn)接口冪等,這樣才優(yōu)雅!

    場(chǎng)景碼猿慢病云管理系統(tǒng)中其實(shí)高并發(fā)的場(chǎng)景不是很多,沒有必要每個(gè)接口都去考慮并發(fā)高的場(chǎng)景,比如添加住院患者的這個(gè)接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:圖片上述代碼有
  • 小紅書1周漲粉49W+,我總結(jié)了小白可以用的N條漲粉筆記

    作者:黃河懂運(yùn)營(yíng)一條性教育視頻,被54萬(wàn)人&ldquo;珍藏&rdquo;是什么體驗(yàn)?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過(guò)128萬(wàn)人,為她瘋狂點(diǎn)贊!更瘋狂的是,這
  • 騰訊VS網(wǎng)易,最卷游戲暑期檔,誰(shuí)能笑到最后?

    作者:無(wú)銹缽來(lái)源:財(cái)經(jīng)無(wú)忌7月16日晚,上海1862時(shí)尚藝術(shù)中心。伴隨著幻象的精準(zhǔn)命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰(zhàn)隊(duì)以絕對(duì)的優(yōu)勢(shì)戰(zhàn)勝了BLG戰(zhàn)隊(duì),拿下了總決
  • iQOO 11S新品發(fā)布會(huì)

    iQOO將在7月4日19:00舉行新品發(fā)布會(huì),推出杭州亞運(yùn)會(huì)電競(jìng)賽事官方用機(jī)iQOO 11S。
  • 由于成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將明顯上漲

    根據(jù)知情人士透露,由于材料、物流等成本持續(xù)增加,筆記本產(chǎn)品價(jià)格預(yù)計(jì)將在2021年下半年有明顯上漲。進(jìn)入6月下旬以來(lái),全球半導(dǎo)體芯片缺貨情況加劇,顯卡、處理器
  • AI藝術(shù)欣賞體驗(yàn)會(huì)在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯(cuò)的鏡像世界,虛實(shí)幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場(chǎng)景都出現(xiàn)在2019世界人工智能大會(huì)的舞臺(tái)上。8月29日至31日,“AI藝術(shù)欣賞體驗(yàn)會(huì)”在上海
Top