| 5 | 1/1 | 返回列表 |
| 查看: 896 | 回復(fù): 4 | |||
| 當(dāng)前只顯示滿足指定條件的回帖,點(diǎn)擊這里查看本話題的所有回帖 | |||
微塵、夢(mèng)想木蟲 (知名作家)
|
[求助]
關(guān)于java多線程啊~
|
||
剛學(xué),莫笑~![]() 情況是這樣的…… 三個(gè)線程: zhang.start(); //打印出我姓張 for{ //打印出我是主線程 } wang.start(); //打印出我姓王 情景1:循環(huán)9次,沒有調(diào)用sleep(),由JVM自行管理,執(zhí)行結(jié)果是主線程先執(zhí)行結(jié)束,然后是zhang線程,最后是wang線程。我的理解是計(jì)算機(jī)執(zhí)行太快了,所以沒有看到希望的結(jié)果…… 情景2:于是呢,那就循環(huán)9000次吧,終于看到效果了,發(fā)現(xiàn)主線程打印了幾百行,zhang線程才打印一行,然后又是主線程打印數(shù)百行。我發(fā)現(xiàn)JVM管理線程,時(shí)間分配似乎是隨機(jī)的…… 情景3:還是循環(huán)9次,這次調(diào)用sleep(1),發(fā)現(xiàn)即使都中斷1微秒,執(zhí)行時(shí)間也沒有平均分配,比如說,主線程執(zhí)行2次,zhang線程執(zhí)行1次,或者主線程執(zhí)行1次,zhang線程執(zhí)行3次等。 情景4:調(diào)換一下順序: zhang.start(); //打印出我姓張 wang.start(); //打印出我姓王 for{ //打印出我是主線程 } 此時(shí),有三個(gè)線程由JVM管理,但是他們的執(zhí)行順序也是隨機(jī)的,并沒有按所謂的排隊(duì)順序。 問題:就想問一下,當(dāng)線程(比如說執(zhí)行了zhang.start(); )交由JVM管理后,那么每一個(gè)線程執(zhí)行時(shí)間和執(zhí)行順序都是由JVM隨機(jī)分配的???????? |

至尊木蟲 (職業(yè)作家)
|
雖然說線程是并發(fā)運(yùn)行的。然而實(shí)際情況并非如此。對(duì)于多線程的程序,任務(wù)角色的不同使得每個(gè)線程的重要程度也不盡相同,如多個(gè)線程在等待獲得CPU時(shí)間片,往往希望優(yōu)先級(jí)高的線程優(yōu)先搶占到CPU并得以執(zhí)行。此外,多個(gè)線程交替執(zhí)行時(shí),不同優(yōu)先級(jí)決定了級(jí)別高的線程將得到CPU的次數(shù)多一些且時(shí)間長(zhǎng)一些,這樣,高優(yōu)先級(jí)的線程任務(wù)處理的效率明顯就會(huì)更高一些,從而滿足一些特殊的需要 但并不是說級(jí)別高的線程執(zhí)行完了才會(huì)執(zhí)行級(jí)別低的,那就不叫多線程了 |

至尊木蟲 (職業(yè)作家)

木蟲 (知名作家)
|
但是書上說,如果設(shè)置優(yōu)先級(jí),優(yōu)先級(jí)高的會(huì)先執(zhí)行,直到優(yōu)先級(jí)高的執(zhí)行結(jié)束才會(huì)執(zhí)行優(yōu)先級(jí)低的,還有就是不主張?jiān)O(shè)置優(yōu)先級(jí),會(huì)影響程序的可移植性,應(yīng)該交給JVM自動(dòng)管理,我該相信誰(shuí)呢? ![]() 另外,對(duì)于優(yōu)先級(jí)相同的,JVM又是如何管理的呢?根據(jù)運(yùn)行情況,好像分配時(shí)間是隨機(jī)的,執(zhí)行的先后順序也是隨機(jī)的…… |

金蟲 (著名寫手)
|
雖然不懂Java,但是勉強(qiáng)插嘴下吧。 線程調(diào)度算法有很多種的,但是原則上來說還是高優(yōu)先級(jí)搶占執(zhí)行,同優(yōu)先級(jí)競(jìng)爭(zhēng)。競(jìng)爭(zhēng)嘛,自然是有白癡進(jìn)程搶不到了。 ![]() 實(shí)現(xiàn)優(yōu)先級(jí)有很多不同的數(shù)據(jù)結(jié)構(gòu),比如優(yōu)先級(jí)隊(duì)列,最大堆,這個(gè)數(shù)據(jù)結(jié)構(gòu)形成所謂的調(diào)度表。 每當(dāng)生成一個(gè)線程,就會(huì)往調(diào)度表里面插入一個(gè)線程標(biāo)識(shí)。由于數(shù)據(jù)結(jié)構(gòu)的原因,高優(yōu)先級(jí)總是在前面,但站位次序卻不一定是排隊(duì)的。 每執(zhí)行完一個(gè)時(shí)間片,調(diào)度程序就會(huì)從調(diào)度表中選取一個(gè)線程繼續(xù)執(zhí)行,一般來說,這里的操作應(yīng)該是將當(dāng)前線程重新插入到調(diào)度表中,再讀取其中一個(gè)線程。 對(duì)你的第一種代碼, start就插入一個(gè)zhang線程到調(diào)度表 接著就foreach 然后再插入start.wang 肯定就是主線程與zhang互相競(jìng)爭(zhēng),競(jìng)爭(zhēng)和排隊(duì)又不同了,競(jìng)爭(zhēng)是概率問題。 第二種代碼的話,就是三個(gè)線程競(jìng)爭(zhēng)。 不要設(shè)置優(yōu)先級(jí)有兩個(gè)考慮,一個(gè)是JVM的8級(jí)優(yōu)先級(jí)并不是與系統(tǒng)完全映射了,不同系統(tǒng)的優(yōu)先級(jí)別是不同的,調(diào)整優(yōu)先級(jí)的不二法門是采用三級(jí)優(yōu)先級(jí):最高優(yōu)先級(jí)、最低優(yōu)先級(jí)和正常優(yōu)先級(jí)。第二個(gè)問題是設(shè)置優(yōu)先級(jí)可能在某些系統(tǒng)導(dǎo)致線程餓死,某些系統(tǒng)上卻不會(huì)。 |

| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 化學(xué)工程321分求調(diào)劑 +18 | 大米飯! 2026-03-15 | 22/1100 |
|
|---|---|---|---|---|
|
[考研] 326求調(diào)劑 +4 | mlpqaz03 2026-03-15 | 4/200 |
|
|
[考研] 生物學(xué)調(diào)劑 +3 | Surekei 2026-03-21 | 3/150 |
|
|
[考研] 0856材料專碩353求調(diào)劑 +3 | NIFFFfff 2026-03-20 | 3/150 |
|
|
[考研] 機(jī)械專碩299求調(diào)劑至材料 +3 | kkcoco25 2026-03-16 | 4/200 |
|
|
[考研] 083200學(xué)碩321分一志愿暨南大學(xué)求調(diào)劑 +3 | innocenceF 2026-03-17 | 3/150 |
|
|
[考研] 一志愿中國(guó)石油大學(xué)(華東) 本科齊魯工業(yè)大學(xué) +3 | 石能偉 2026-03-17 | 3/150 |
|
|
[考研] 華東師范大學(xué)-071000生物學(xué)-293分-求調(diào)劑 +3 | 研究生何瑤明 2026-03-18 | 3/150 |
|
|
[考研] 330求調(diào)劑 +4 | 小材化本科 2026-03-18 | 4/200 |
|
|
[考研] 一志愿南京理工大學(xué)085701資源與環(huán)境302分求調(diào)劑 +4 | 葵梓衛(wèi)隊(duì) 2026-03-18 | 6/300 |
|
|
[考研] 329求調(diào)劑 +9 | 想上學(xué)吖吖 2026-03-19 | 9/450 |
|
|
[考研] 一志愿華中農(nóng)業(yè)071010,總分320求調(diào)劑 +3 | 困困困困坤坤 2026-03-20 | 3/150 |
|
|
[考研] 353求調(diào)劑 +3 | 拉鉤不許變 2026-03-20 | 3/150 |
|
|
[考研] 材料與化工專碩調(diào)劑 +7 | heming3743 2026-03-16 | 7/350 |
|
|
[考研] 求調(diào)劑 +3 | 暗涌afhb 2026-03-16 | 3/150 |
|
|
[考研] 312求調(diào)劑 +8 | 陌宸希 2026-03-16 | 9/450 |
|
|
[考研] 材料,紡織,生物(0856、0710),化學(xué)招生啦 +3 | Eember. 2026-03-17 | 9/450 |
|
|
[考研] 0703化學(xué)336分求調(diào)劑 +6 | zbzihdhd 2026-03-15 | 7/350 |
|
|
[考研] 考研調(diào)劑 +3 | 淇ya_~ 2026-03-17 | 5/250 |
|
|
[考研]
|
zhouzhen654 2026-03-16 | 3/150 |
|