日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

runoob.com,多線程編程( 二 )


需要指出的是,當(dāng)線程結(jié)束后,對(duì)應(yīng)該線程的局部變量將自動(dòng)被垃圾回收,所以顯式調(diào)用該方法清除線程的局部變量并不是必須的操作,但它可以加快內(nèi)存的回收速度;protected Object initialValue()返回該線程局部變量的初始值,該方法是一個(gè)protected的方法,顯然是為了讓子類覆蓋而設(shè)計(jì)的 。
這個(gè)方法是一個(gè)延遲調(diào)用方法,在線程第1次調(diào)用get()或set(Object)時(shí)才執(zhí)行,并且僅執(zhí)行1次 。ThreadLocal中的缺省實(shí)現(xiàn)直接返回一個(gè)null 。2.ThreadLocal底層實(shí)現(xiàn)原理:ThreadLocal通過(guò)Thread.currentThread();獲取當(dāng)前線程操作map集合:ThreadLocalMapvoid set(Object value)就是Map.put(“當(dāng)前線程”,值);public Object get()就是獲取ThreadLocalMap然后操作后返回 。
五、線程池1.為什么要使用線程池?因?yàn)橐ㄟ^(guò)線程池來(lái)管理線程,啟動(dòng)或者停止一個(gè)線程非常耗費(fèi)資源,所以將線程交給線程池來(lái)管理能夠節(jié)約內(nèi)存 。一般在企業(yè)開發(fā)當(dāng)中我們都使用線程池,通過(guò)spring去整合線程池,異步注解 。2.什么是線程池?線程池是指在初始化一個(gè)多線程應(yīng)用程序過(guò)程中創(chuàng)建一個(gè)線程集合,然后在需要執(zhí)行新的任務(wù)時(shí)重用這些線程而不是新建一個(gè)線程 。
線程池中線程的數(shù)量通常完全取決于可用內(nèi)存數(shù)量和應(yīng)用程序的需求 。然而,增加可用線程數(shù)量是可能的 。線程池中的每個(gè)線程都有被分配一個(gè)任務(wù),一旦任務(wù)已經(jīng)完成了,線程回到池子中并等待下一次分配任務(wù) 。3.線程池作用:基于以下幾個(gè)原因,在多線程應(yīng)用程序中使用線程池是必須的:1.線程池改進(jìn)了一個(gè)應(yīng)用程序的相應(yīng)時(shí)間 。由于線程池中的線程已經(jīng)準(zhǔn)備好且等待被分配任務(wù),應(yīng)用程序可以直接拿來(lái)使用而不用新建一個(gè)線程 。
2.線程池節(jié)省了CLR為每個(gè)短生命周期任務(wù)創(chuàng)建一個(gè)完整的線程開銷并可以在任務(wù)完成后回收資源 。3.線程池根據(jù)當(dāng)前在系統(tǒng)中運(yùn)行的進(jìn)程來(lái)優(yōu)化線程時(shí)間片 。4.線程池允許我們開啟多個(gè)任務(wù)而不用為每個(gè)線程設(shè)置屬性 。5.線程池允許我們?yōu)檎趫?zhí)行任務(wù)的程序參數(shù)傳遞一個(gè)包含狀態(tài)信息的對(duì)象引用 。6.線程池可以用來(lái)解決處理一個(gè)特定請(qǐng)求最大線程數(shù)量限制問(wèn)題 。
4.線程池四種創(chuàng)建方式:java通過(guò)Executors(jdk1.5的并發(fā)包)提供四種線程池,分別為:1.newCachedThreadPool 創(chuàng)建一個(gè)可緩存線程池,如果線程池長(zhǎng)度超過(guò)處理需要,可靈活回收空閑線程,若無(wú)可回收,則新建線程 。2.newFixedThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池,可控制線程最大并發(fā)數(shù),超出的線程會(huì)在隊(duì)列中等待 。
3.newScheduledThreadPool 創(chuàng)建一個(gè)定長(zhǎng)線程池,支持定時(shí)及周期性任務(wù)執(zhí)行4.newSingleThreadExecutor 創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來(lái)執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO,LIFO,優(yōu)先級(jí))執(zhí)行 ??偨Y(jié):newCachedThreadPool 創(chuàng)建的線程,線程池為無(wú)限大,當(dāng)執(zhí)行第二個(gè)任務(wù)時(shí)第一個(gè)任務(wù)已經(jīng)完成,會(huì)復(fù)用執(zhí)行第一個(gè)任務(wù)的線程,而不用每次新建線程 。
Java初學(xué)有必要深入多線程編程嗎,如何學(xué)習(xí)?

runoob.com,多線程編程


多線程作為JAVA學(xué)習(xí)的主要難點(diǎn)之一,有開發(fā)復(fù)雜,出現(xiàn)問(wèn)題難以復(fù)現(xiàn)等特性,但卻是不得不掌握的知識(shí)點(diǎn),因?yàn)镴AVA中使用多線程的場(chǎng)景實(shí)在是太多了 。先看下多線程(所有語(yǔ)言)的發(fā)展背景:早期的計(jì)算器都是單核CPU,想要獲得更高的性能只能是擴(kuò)展硬件(摩爾定律),但是很快硬件的發(fā)展達(dá)到了瓶頸,要提高計(jì)算能力只能是橫向擴(kuò)展(增加計(jì)算機(jī)CPU核心,現(xiàn)在也沒(méi)有單核心的計(jì)算機(jī)了吧),因?yàn)橐粋€(gè)CPU在同一個(gè)時(shí)間點(diǎn)上只能處理一個(gè)線程,現(xiàn)在的服務(wù)器少則16核,如果使用單線程編程,相當(dāng)于你只用了1/16的CPU資源,暴殄天物!所以多線程是很有必要學(xué)習(xí)的 。

推薦閱讀