在網上看到很有意思的問題,摘下來好好看下
在面試的時候被問了乙個多執行緒的問題
回來仔細思考了一下,多執行緒是否真的能提高了效率?
我對多執行緒的理解就是:
比如挖乙個隧道,有2種開工方法
1、只在山的一頭挖,直至挖到山的另一頭,從而打通隧道,這可以看成是單執行緒
2、在山的兩頭挖,同時開工,最後在山的中間接通,從而打通隧道,這感覺肯定比1快了很多,好比多執行緒
但是2成立的前提是必須有兩個工人。而我們的計算機中一般來說只有乙個cpu,也就是說只有乙個工人。
多執行緒不過是cpu在不同的時間片之間切換,而表現出齊頭並進的樣子。
既然挖隧道的人只有乙個,雖然我的施工方案是在山的兩頭開挖,但是由於工作的人只有乙個,所以只有讓這個人在山的兩頭跑,挖一會這頭再去挖另一頭,來回跑是要花費額外時間的(好比執行緒的切換和排程)。
那麼,我們是不是可以說,在單cpu的機器中,多執行緒反而降低了效率呢?
下面是覺得還行的回答
樓主提的問題很有意思。經典的解釋是 - 如果cpu確實是乙個挖山工人,那麼它工作就好像是挖1個小時,然後休息10個小時;這期間如果讓它跑到山那頭繼續挖,效率還是很高的。
pc機不光只乙個cpu,cpu和其它硬體裝置一起才能完成計算,分工協作,但可能出現其中某個傢伙偷懶或效率低,導致大家都等它,閒著的其它裝置這個時 候可以騰出手來幹其它活。單cpu在同一時刻只能幹一件事情,這沒有問題,問題是它並不是7*24*3600都在幹活,其它裝置也是同樣的道理,多執行緒的目的可以最大限度的提高硬體裝置的利用率。
Java 多執行緒
1。thread類和runnable介面 2。主線程 用thread的static thread currentthread 方法獲得 3。通過實現runnable介面建立執行緒 實現runnable介面的run方法。新執行緒在run 方法返回時結束。注意用這種方法建立程序時,在實現runnable...
JAVA 多執行緒
為hashmap的不正確使用所導致。hashmap在多執行緒環境下使用不安全。使用靜態hashmap作為聯絡人資料快取,key為手機號碼.private static maplxrdata new hashmap 多執行緒環境下不同步hashmap可能導致如下問題 1 多執行緒put操作後可能導致g...
Java多執行緒
建立任務和執行緒 任務就是物件。為了建立任務,必須首先為任務定義乙個類。任務類必須實現runnable介面。runnable介面非常簡單,它只包含乙個run方法。一旦定義了taskclass,就可以呼叫其構造方法建立乙個任務。taskclass task new taskclass thread t...