我想問一下 各位大神 那個(gè)發(fā)送下載進(jìn)度給activity mfinished是單個(gè)線程的完成度吧 應(yīng)該是傳過去所有線程的已經(jīng)下載的進(jìn)度吧 不解啊 這里
2017-05-15
接上一條評(píng)論:
當(dāng)?shù)谝粋€(gè)線程執(zhí)行到行1,已進(jìn)入if內(nèi),但還沒有執(zhí)行行2時(shí),即sHelper依然為null,此時(shí)系統(tǒng)如果切換到第二個(gè)線程執(zhí)行,第二個(gè)線程依然能進(jìn)入if內(nèi),然后new一個(gè)并返回一個(gè)sHelper實(shí)例(假設(shè)內(nèi)存地址為0x000012)。然后系統(tǒng)切換回線程1,繼續(xù)在if內(nèi)向下執(zhí)行,此時(shí)它也會(huì)new一個(gè)實(shí)例(假設(shè)內(nèi)存地址為0x000023)并返回。這樣的話,各線程拿到的實(shí)例是不同的,在寫數(shù)據(jù)庫(kù)時(shí)依然會(huì)發(fā)生加鎖情況。
給方法加同步,或用雙重檢測(cè)可解決,不了解的同學(xué)建議看看單例模式的七種寫法(亦有說八種)及它們各自的優(yōu)缺點(diǎn)。
當(dāng)?shù)谝粋€(gè)線程執(zhí)行到行1,已進(jìn)入if內(nèi),但還沒有執(zhí)行行2時(shí),即sHelper依然為null,此時(shí)系統(tǒng)如果切換到第二個(gè)線程執(zhí)行,第二個(gè)線程依然能進(jìn)入if內(nèi),然后new一個(gè)并返回一個(gè)sHelper實(shí)例(假設(shè)內(nèi)存地址為0x000012)。然后系統(tǒng)切換回線程1,繼續(xù)在if內(nèi)向下執(zhí)行,此時(shí)它也會(huì)new一個(gè)實(shí)例(假設(shè)內(nèi)存地址為0x000023)并返回。這樣的話,各線程拿到的實(shí)例是不同的,在寫數(shù)據(jù)庫(kù)時(shí)依然會(huì)發(fā)生加鎖情況。
給方法加同步,或用雙重檢測(cè)可解決,不了解的同學(xué)建議看看單例模式的七種寫法(亦有說八種)及它們各自的優(yōu)缺點(diǎn)。
2017-05-07
提醒下后來(lái)的同學(xué):
視頻中的單例模式是不安全的,不能保證只產(chǎn)生單例。
if(sHelper==null){ // 行1
sHelper = new DatabaseHelper(context); //行2
}
return sHelper; // 行3
視頻中的單例模式是不安全的,不能保證只產(chǎn)生單例。
if(sHelper==null){ // 行1
sHelper = new DatabaseHelper(context); //行2
}
return sHelper; // 行3
2017-05-07
已采納回答 / 小鵬不小
咳咳咳 ?這個(gè)可以看做是一個(gè)靜態(tài)內(nèi)部類,它呢不會(huì)持有外部類的應(yīng)用 ?老師這里應(yīng)該只是為了方便而已...在開發(fā)時(shí),提倡使用內(nèi)部類提倡這種...比如Handler ? 這樣不會(huì)造成內(nèi)存泄漏
2017-04-25
那個(gè)getAllThread查詢沒問題是因?yàn)樵谌蝿?wù)開始之前執(zhí)行,不涉及多線程,不過那個(gè)isExists是在任務(wù)開始后執(zhí)行的,會(huì)出現(xiàn)查詢時(shí)Cursor被其他線程關(guān)閉的問題
2017-03-16
最新回答 / 慕粉0946147077
再次下載下載進(jìn)度不對(duì),可能是數(shù)據(jù)庫(kù)里面的數(shù)據(jù)不對(duì)了,應(yīng)為下載進(jìn)度每次都是從數(shù)據(jù)庫(kù)里面獲取的,所以檢查一下數(shù)據(jù)庫(kù)讀寫操作這個(gè)流程看看是哪個(gè)步驟出問題了
2016-12-24
最贊回答 / 天道酬勤_life
將InputStream換成BufferedInputStream,初始化bis=new BufferedInputStream(connection.getInputStream());? ?其余的不變
2016-12-08
這樣改getview代碼是不對(duì)的吧。?;瑒?dòng)一下數(shù)據(jù)就亂了
2016-11-10