java內存模型:java
jdk1.2以前,java內存模型實現從主存(共享內存)讀取變量,是不須要特別注意的多線程
當前內存模型爲存儲在本地內存(好比機器的寄存器),而不是直接在主存中讀取的jvm
這樣會形成不一樣訪問時候讀取數據不一致spa
解決辦法:把變量成名爲volatile,這就告訴了jvm這個變量是不穩定的,每次讀取須要重主存中讀取數據線程
synchronized關鍵字與volatile關鍵字的區別?
volatile是輕量級的對象
synchronized能夠修飾方法,代碼塊,用的比較多接口
多線程訪問volatile不會發生線程阻塞內存
..資源
爲何要用線程池?get
1.下降資源消耗:由於頻繁的建立、銷燬線程,會佔用系統資源,所以減小線程的建立,就能夠下降系統資源消耗;
2.提升響應速度:當任務到達是,不須要在建立線程就能夠直接執行;
3.提升系統穩定性:頻繁的建立,也會下降系統的穩定性,所以須要線程池進行統一的分配、調優和管理
實現runable接口與callable接口的區別
二者區別就是runnable執行後不返回執行結果,callable執行後有返回結果。
execute與submit方法的區別
execute用於提交不須要返回值結果的任務,因此沒法判斷被線程池執行是否成功
submit執行有返回值的任務,可以判斷執行成功與否,線程池會返回一個future類型的對象,經過這個future能夠判斷是否成功,而且能夠經過future的get()方法來回去返回值,