Python知識分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
Java高級面試題,經(jīng)典多線程并發(fā)問題和答案 PDF 下載
匿名網(wǎng)友發(fā)布于:2024-02-18 10:45:01
(侵權(quán)舉報)
(假如點擊沒反應(yīng),多刷新兩次就OK!)

Java高級面試題,經(jīng)典多線程并發(fā)問題和答案  PDF 下載  圖1

 

 

資料內(nèi)容:

 

 

1、 并發(fā)編程三要素?
1) 原子性
原子性指的是一個或者多個操作, 要么全部執(zhí)行并且在執(zhí)行的過程中不被其他操作打
斷, 要么就全部都不執(zhí)行。
2) 可見性
可見性指多個線程操作一個共享變量時, 其中一個線程對變量進行修改后, 其他線
程可以立即看到修改的結(jié)果。
3) 有序性
有序性, 即程序的執(zhí)行順序按照代碼的先后順序來執(zhí)行。
2、 實現(xiàn)可見性的方法有哪些?
synchronized 或者 Lock: 保證同一個時刻只有一個線程獲取鎖執(zhí)行代碼, 鎖釋放之
前把最新的值刷新到主內(nèi)存, 實現(xiàn)可見性。
3、 多線程的價值?
1) 發(fā)揮多核 CPU 的優(yōu)勢
多線程, 可以真正發(fā)揮出多核 CPU 的優(yōu)勢來, 達到充分利用 CPU 的目的, 采用
多線程的方式去同時完成幾件事情而不互相干擾。
2) 防止阻塞
從程序運行效率的角度來看, 單核 CPU 不但不會發(fā)揮出多線程的優(yōu)勢, 反而會因為
在單核 CPU 上運行多線程導(dǎo)致線程上下文的切換, 而降低程序整體的效率。 但是單
CPU 我們還是要應(yīng)用多線程, 就是為了防止阻塞。 試想, 如果單核 CPU 使用
單線程, 那么只要這個線程阻塞了, 比方說遠程讀取某個數(shù)據(jù)吧, 對端遲遲未返回
又沒有設(shè)置超時時間, 那么你的整個程序在數(shù)據(jù)返回回來之前就停止運行了。 多線
程可以防止這個問題, 多條線程同時運行,哪怕一條線程的代碼執(zhí)行讀取數(shù)據(jù)阻塞,
也不會影響其它任務(wù)的執(zhí)行。
3) 便于建模
這是另外一個沒有這么明顯的優(yōu)點了。 假設(shè)有一個大的任務(wù) A, 單線程編程, 那么
就要考慮很多, 建立整個程序模型比較麻煩。 但是如果把這個大的任務(wù) A 分解成幾
個小任務(wù), 任務(wù) B、 任務(wù) C、 任務(wù) D, 分別建立程序模型, 并通過多線程分別運
行這幾個任務(wù), 那就簡單很多了。
4、 創(chuàng)建線程的有哪些方式?
1) 繼承 Thread 類創(chuàng)建線程類
2) 通過 Runnable 接口創(chuàng)建線程類
3) 通過 Callable Future 創(chuàng)建線程
4) 通過線程池創(chuàng)建
5、 創(chuàng)建線程的三種方式的對比?
1) 采用實現(xiàn) RunnableCallable 接口的方式創(chuàng)建多線程。
優(yōu)勢是:線程類只是實現(xiàn)了 Runnable 接口或 Callable 接口, 還可以繼承其他類。 在這種方
式下, 多個線程可以共享同一個 target 對象, 所以非常適合多個相同線程來處理同
一份資源的情況,從而可以將 CPU、 代碼和數(shù)據(jù)分開, 形成清晰的模型, 較好地體
現(xiàn)了面向?qū)ο蟮乃枷搿?
劣勢是:
編程稍微復(fù)雜, 如果要訪問當(dāng)前線程, 則必須使用 Thread.currentThread()方法。
2) 使用繼承 Thread 類的方式創(chuàng)建多線程
優(yōu)勢是:
編寫簡單, 如果需要訪問當(dāng)前線程, 則無需使用 Thread.currentThread()方法, 直接
使用 this 即可獲得當(dāng)前線程。
劣勢是:
線程類已經(jīng)繼承了 Thread 類, 所以不能再繼承其他父類。
3Runnable Callable 的區(qū)別
1、 Callable 規(guī)定(重寫) 的方法是 call(), Runnable 規(guī)定(重寫) 的方法是
run()。
2Callable 的任務(wù)執(zhí)行后可返回值, 而 Runnable 的任務(wù)是不能返回值的。
3、 Call 方法可以拋出異常, run 方法不可以。
4、 運行 Callable 任務(wù)可以拿到一個 Future 對象, 表示異步計算的結(jié)果。 它提供
了檢查計算是否完成的方法, 以等待計算的完成, 并檢索計算的結(jié)果。 通過 Future
對象可以了解任務(wù)執(zhí)行情況, 可取消任務(wù)的執(zhí)行, 還可獲取執(zhí)行結(jié)果。