多線程任務(wù)的優(yōu)化問題一

問題:當(dāng)每次點(diǎn)擊界面上的item觸發(fā)開啟一個(gè)子線程,去請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù),界面上的item很多,在用戶迅速點(diǎn)擊的情況下, 會(huì)新建n個(gè)子線程, 每個(gè)線程在內(nèi)存中占用1M空間, 消耗非常大,如何優(yōu)化這種多線程任務(wù)?

解決方案: 用線程池去處理這種多線程的任務(wù), 線程池的核心線程個(gè)數(shù)為1 ,用有界隊(duì)列將新的線程添加進(jìn)來,有界隊(duì)列的size 也為1,即在線程池中 只能同時(shí)允許1個(gè)線程運(yùn)行, 1個(gè)線程等待,在將新的線程添加進(jìn)線程池之前, 先將線程池的隊(duì)列清空,具體實(shí)現(xiàn)方案如下:

public class CountRunnable implements Runnable{

@Override

public void run() {

for(int i = 0 ; i < 5 ; i++){

System.out.println(Thread.currentThread().getName()+" i : "+i);

try {

Thread.sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

System.out.println("---------------------------------");

}

}


int corePoolSize = 1;//核心線程個(gè)數(shù)

int maximumPoolSize? = 1;//最大線程個(gè)數(shù)

long keepAliveTime = 5;//線程存活時(shí)間

TimeUnit unit = TimeUnit.SECONDS;

ArrayBlockingQueueworkQueue = new ArrayBlockingQueue<>(1);

ThreadPoolExecutor executor =new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue);

//添加十個(gè)任務(wù)

for(int i = 1 ; i < 10; i++){

BlockingQueuequeue = executor.getQueue();

queue.clear();//添加任務(wù)之前,先將任務(wù)隊(duì)列清空

System.out.println("blockQueue size : "+executor.getQueue().size());

executor.execute(new CountRunnable());

}

System.out.println("## blockQueue size : "+executor.getQueue().size());

上面所做的操作實(shí)際就是:用線程池去處理這種多線程的任務(wù), 線程池的核心線程個(gè)數(shù)為1 ,用有界隊(duì)列將新的線程添加進(jìn)來,有界隊(duì)列的size 也為1,即在線程池中 只能同時(shí)允許1個(gè)線程運(yùn)行, 1個(gè)線程等待,在將新的線程添加進(jìn)線程池之前, 先將線程池的隊(duì)列清空, 輸出的log可以看到, 雖然在運(yùn)行的過程中添加了10個(gè)線程任務(wù), 但是實(shí)際上只運(yùn)行完成了兩個(gè)線程任務(wù):

blockQueue size : 0

blockQueue size : 0

blockQueue size : 0

blockQueue size : 0

blockQueue size : 0

pool-1-thread-1 i : 0

blockQueue size : 0

blockQueue size : 0

blockQueue size : 0

blockQueue size : 0

## blockQueue size : 1

pool-1-thread-1 i : 1

pool-1-thread-1 i : 2

pool-1-thread-1 i : 3

pool-1-thread-1 i : 4

---------------------------------

pool-1-thread-1 i : 0

pool-1-thread-1 i : 1

pool-1-thread-1 i : 2

pool-1-thread-1 i : 3

pool-1-thread-1 i : 4

---------------------------------

通過這種方式, 不管用戶如何點(diǎn)擊界面上的item ,實(shí)際上頁面所需要的數(shù)據(jù)是用戶最后一次點(diǎn)擊item所返回回來的數(shù)據(jù), 這樣就避免了創(chuàng)建n個(gè)不必要的線程任務(wù).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末珍促,一起剝皮案震驚了整個(gè)濱河市嫌吠,隨后出現(xiàn)的幾起案子核偿,更是在濱河造成了極大的恐慌,老刑警劉巖焰枢,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杠览,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡疮丛,警方通過查閱死者的電腦和手機(jī)轰传,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門驴党,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人获茬,你說我怎么就攤上這事港庄【蠹龋” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵鹏氧,是天一觀的道長(zhǎng)渤涌。 經(jīng)常有香客問我,道長(zhǎng)把还,這世上最難降的妖魔是什么实蓬? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮吊履,結(jié)果婚禮上安皱,老公的妹妹穿的比我還像新娘。我一直安慰自己艇炎,他們只是感情好酌伊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缀踪,像睡著了一般居砖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辜贵,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天悯蝉,我揣著相機(jī)與錄音归形,去河邊找鬼托慨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛暇榴,可吹牛的內(nèi)容都是我干的厚棵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔼紧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼婆硬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奸例,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤彬犯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后查吊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谐区,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年逻卖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宋列。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡评也,死狀恐怖炼杖,靈堂內(nèi)的尸體忽然破棺而出灭返,到底是詐尸還是另有隱情,我是刑警寧澤坤邪,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布熙含,位于F島的核電站,受9級(jí)特大地震影響艇纺,放射性物質(zhì)發(fā)生泄漏婆芦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一喂饥、第九天 我趴在偏房一處隱蔽的房頂上張望消约。 院中可真熱鬧,春花似錦员帮、人聲如沸或粮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氯材。三九已至,卻和暖如春硝岗,著一層夾襖步出監(jiān)牢的瞬間氢哮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工型檀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冗尤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓胀溺,卻偏偏與公主長(zhǎng)得像裂七,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仓坞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容