Java多執行緒及執行緒池

2021-09-01 09:00:04 字數 2443 閱讀 3380

提問:我開啟了乙個qq**,又開啟了乙個遊戲,請問我開啟了兩個執行緒嗎?

回答:概念理解錯誤,你其實開啟是兩個程序,為什麼呢,請看概念

程序是正在執行的程式,是系統呼叫資源和進行資源分配的基本單位。比如所說的qq**,和乙個遊戲,這就是兩個正在執行的程式。我們的作業系統都是多程序的。

繼續提問:早期的計算機是單核計算機,但是為什麼我同時開啟兩個程式,感覺基本上他們是同時在執行的,比如聽歌和玩遊戲。

回答:單核計算機在同乙個時間片內只能做一件事情,只不過cpu的操作時間是毫秒級的也就是它在飛速切換程式,而毫秒級人類時沒有辦法感覺來的,給我們的感覺是同時進行的。

我又來提問了:我知道多程序是為了提高計算機的執行效率速度,所以有了雙核,四核,四核八執行緒的計算機,那多執行緒程式是不是也是為了提高效率呢?

回答:愛提問是好事情。但是並不是這樣,程式的執行是需要搶奪cpu的執行權的,多執行緒搶到cpu片段的機率肯定要大於單執行緒,這樣一來cpu空閒的時間就會變短,從而提高了應用程式的使用率。

public class threaddemo 

}class mythread extends thread

}

public class threaddemo2 

}class myrunnable implements runnable

}

提問:為什麼你開啟執行緒要使用start()方法而不是run()方法呢回答:start()方法是開啟執行緒,開啟以後由jvm呼叫該執行緒的run()方法,這樣叫做多執行緒,而如果用thread物件呼叫run()方法,就是普通的物件呼叫方法,跟單執行緒沒有什麼區別。1、多執行緒環境

2、存在共享變數

3、存在多條語句操作共享變數

使用同步**塊 格式如下

synchronized(物件)
提問:這裡面的物件是什麼?回答:這個物件就像鎖一樣,這個鎖可以是任意物件。當多個執行緒去爭奪時,首先搶到的執行緒會進去並且鎖上,這樣後面的執行緒也就不會進來「搗亂了」,這樣就可以保證執行緒得到安全性。但是一旦這樣多執行緒就變成了單執行緒一般,所以相比較來說執行效率就低了。除了同步**塊以外,jdk1.5以後為我們提供了一種輕量級的鎖---lock鎖具體使用方法

public class lockdemo extends thread 

}

提問:為什麼會產生死鎖問題呢?回答:如果執行緒中同步**塊巢狀多了,就會出現乙個等乙個的現象,這樣程式無法繼續執行,這就是死鎖,看這個**你就明白了。

public class dieddemo 

}class mythread2 extends thread

@override

public void run() catch (interruptedexception e)

synchronized (obja)

}}else}}

}}

補充假設執行緒1先進來了,是true,接下來執行緒2也搶到執行權,是false進入else裡面,執行緒1需要等objb鎖,同時擁有obja鎖無法釋放,執行緒2擁有objb鎖,但是也在等obja鎖,也沒有辦法釋放,這樣就是你等我我等你,系統程式沒有辦法繼續執行就會產生死鎖現象。提問:為什麼要使用執行緒池呢?回答:因為新建乙個執行緒並啟動它其實是特別耗費資源的,所以我們可以預先建立一些執行緒放在乙個池子裡面,隨拿隨用,用完再放回就好了,這些執行緒不會死亡,可以等待下乙個雇主使用。這樣就可以節約許多成本。追問:但是如何保證執行緒使用使用完畢以後不會死亡的?

回答:你看了這個圖自然就懂了

通過工廠類executors功提供的方法可以建立執行緒池。

public class threadpooldemo 

});object o = submit.get();//獲取返回值

service.shutdown();//關閉執行緒池}}

java多執行緒 執行緒池

執行緒池的狀態含義 執行緒池引數 執行緒池種類 使用樣例 executors工廠類 執行緒池的調優策略 上乙個文章說多執行緒的實現方法有四個,其中第四個有提到exectorservice介面與callable與runnable,futrue等的一起實現,exectorservice是執行緒的管理工具...

JAVA多執行緒之 執行緒池

執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...

java多執行緒,spring配置執行緒池

實際專案中用到多執行緒,提供spring配置執行緒池完整 如下 本專案用的jar包為基本的spring配置jar包 1 properties配置檔案中線程池引數 taskexecutor.corepoolsize 100 taskexecutor.keepaliveseconds 10 taskex...