java中多執行緒一定快嗎 看完就知道

2021-08-18 16:49:43 字數 1263 閱讀 6192

理解上下文切換

即使是單核處理器也支援多執行緒執行**,cpu通過每個執行緒分配cpu時間片來實現這個機制.時間片是cpu分配給多個執行緒的時間,因為時間片非常短,所以cpu通過不停的切換執行緒執行,讓我們感覺多個執行緒是同時執行的,時間片一般是幾十毫秒(ms).

cpu通過時間片分配演算法來迴圈執行任務,當前任務執行乙個時間片後會切換到下乙個任務.但是,在切換前會儲存上乙個任務的狀態,以便下次切換回這個任務是,可以再載入這個任務狀態.所以任務從儲存到再載入的過程就是一次上下文切換,上下文切換會影響多執行緒的執行速度!!!

多執行緒一定快嗎???

廢話不多說通過**來說話!!!

public class concurrencytest 

private static void concureency() throws interruptedexception

}});

thread.start();

int b = 0;

for(long i = 0; i < count; i++)

thread.join();

long time = system.currenttimemillis() - start;

system.out.println("concureency :" + time+"ms,b="+b); }

private static void serial()

int b = 0;

for (long i = 0; i < count; i++)

long time = system.currenttimemillis() - start;

system.out.println("serial:" + time+"ms,b="+b+",a="+a);

}}

檢視執行結果:

count = 10001時
concureency :1ms,b=-10001

serial:0ms,b=-10001,a=50005

此時多執行緒相比下是比較慢

count = 1000000001時
concureency :476ms,b=-1000000001

serial:712ms,b=-1000000001,a=705032709

此時多執行緒併發比序列快

所以答案是不一定的!!!那麼為什麼會是這樣的呢??

因為執行緒有建立和上下文切換的開銷

java多執行緒一定快嗎?

先看下面的例子 總結 當count 100時,同步執行的時間較短,當count 10000時,非同步執行的時間較短。看起來,並不是非同步一定比同步快。這是因為在程式執行時,cpu會通過時間片分配演算法來迴圈執行任務,在多個任務之間不停的來回切換執行緒。當併發執行累計運算元量較小時,執行的速度會比序列...

多執行緒一定快嗎?

package com.itmyhome.test 測試併發執行和序列執行的效率 author tracymcgrady public class concurrencytest catch interruptedexception e serial 併發執行 private static void...

多執行緒一定快嗎?

cpu通過給執行緒分配cpu時間片來實現多執行緒執行的,也就是時間片輪轉機制,cpu分配給每個執行緒的時間片非常短,所以我們才會感覺多個執行緒是同事執行的。cpu在執行執行完乙個時間片後會切換到下乙個任務,切換之前會儲存上乙個任務的狀態,以便下次切換回這個任務的時候可以載入到這個任務的狀態,所以任務...