人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng) > 硬件軟件教程 > 詳細(xì)頁面

1. 面向?qū)ο笈c面向過程之間的區(qū)別:

1. 面向?qū)ο笈c面向過程之間的區(qū)別:

更新時間:2023-06-21 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

根據(jù)運(yùn)行的環(huán)境,操作系統(tǒng)可以分為桌面操作系統(tǒng),手機(jī)操作系統(tǒng),服務(wù)器操作系統(tǒng),嵌入式操作系統(tǒng)等。

java避免死鎖_java多線程避免死鎖_java多線程避免死鎖

常見異常

數(shù)組腳本越界(ArrayIndexOutOfBoundsException)

NullPointerException(NullPointerException)

ClassCastException(ClassCastException)

使用臨時關(guān)鍵字修改.

瞬時關(guān)鍵字的作用是防止實例中由該關(guān)鍵字修改的變量的序列化;反序列化對象時,瞬態(tài)修改變量的值將不會保留和恢復(fù). 瞬態(tài)只能修改變量,不能修改類和方法

BIO正在阻止IO,就像開水一樣. 他必須先將第一鍋水煮沸,然后再將第二鍋水煮沸,然后再進(jìn)行下一鍋. 會消耗很多時間. NIO是非阻塞IO. 您可以同時煮三鍋水. 他需要經(jīng)常走來走去,觀察每壺水是否在沸騰. 在煮沸過程中別無他法. AIO異步IO是向每個鍋中加水煮沸的計時器開關(guān). 稍后我們會通知我們,我們可以在煮沸過程中做其他事情

final關(guān)鍵字主要在三個地方使用: 變量,方法和類.

static關(guān)鍵字主要具有以下四種使用場景

修改成員變量和成員方法

靜態(tài)代碼塊

靜態(tài)內(nèi)部類

靜態(tài)指南包

靜態(tài)方法和非靜態(tài)方法

靜態(tài){}靜態(tài)代碼塊和{}非靜態(tài)代碼塊(構(gòu)造代碼塊)

此關(guān)鍵字用于引用該類的當(dāng)前實例

super關(guān)鍵字用于從子類訪問父類的變量和方法

冒泡,二分法

&&和&都表示AND,不同之處在于,只要&&的一個條件不同,就不能滿足. 如果不滿足第一個條件,則不判斷以下條件. 并且&必須判斷所有條件

||和都表示“或”,區(qū)別是||只要滿足第一個條件,就不會判斷以下條件,并且|必須判斷所有條件

BigDecimal由任意精度的整數(shù)無標(biāo)度值和32位整數(shù)標(biāo)度(標(biāo)度)組成

BigDecimal在銀行,帳戶,帳單等領(lǐng)域提供準(zhǔn)確的數(shù)值計算

List,Set,Map都是接口,前兩個繼承自Collection接口,Map是獨立接口

Set下有HashSet,LinkedHashSet,TreeSet

列表下有ArrayList,Vector,LinkedList

Map下有Hashtable,LinkedHashMap,HashMap,TreeMap

在Collection接口下還有一個Queue接口,它具有PriorityQueue類

列表是有序且可重復(fù)的

ArrayList

優(yōu)點: 底層數(shù)據(jù)結(jié)構(gòu)是一個數(shù)組,可以快速查詢,而添加或刪除則很慢.

缺點: 線程不安全高效

java多線程避免死鎖_java避免死鎖_java多線程避免死鎖

向量

優(yōu)點: 底層數(shù)據(jù)結(jié)構(gòu)是一個數(shù)組,可以快速查詢,而添加或刪除則很慢.

缺點: 線程安全,效率低

LinkedList

優(yōu)點: 底層數(shù)據(jù)結(jié)構(gòu)是一個鏈表,查詢慢,添加和刪除快.

缺點: 線程不安全高效

-設(shè)置無序,唯一

HashSet

如何確保元素的唯一性?

基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)是哈希表. (無序,唯一)

1. 依靠兩種方法: hashCode()和equals()

LinkedHashSet

底層數(shù)據(jù)結(jié)構(gòu)是鏈表和哈希表. (按順序插入FIFO,唯一)

1. 元素的順序由鏈表保證

2. 哈希表保證了唯一元素

TreeSet

基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)是一棵紅黑樹. (唯一,有序)

1. 如何確保元素的排序?

自然排序

比較器排序

2. 如何確保元素的唯一性?

根據(jù)比較的返回值是否為0來確定.

1.public void init(ServletConfig config)執(zhí)行時間: 創(chuàng)建Servlet對象時將調(diào)用此方法

2. public void service(ServletRequest請求,ServletResponse響應(yīng))執(zhí)行時間: 將為每個請求執(zhí)行此方法;這種方法通常用于業(yè)務(wù)邏輯處理

3. 公共void destroy()執(zhí)行時間: 銷毀Servlet對象(關(guān)閉服務(wù)器)時執(zhí)行此方法

JSP和Servlet之間是什么關(guān)系? JSP本質(zhì)上是Servlet的一種簡單形式. 服務(wù)器將JSP處理成與Servlet類似的Java程序. 有人說Servlet用Java編寫HTML,而JSP用HTML編寫Java代碼編寫,當(dāng)然,這種說法是單方面的,不夠準(zhǔn)確. JSP專注于視圖,Servlet更多關(guān)注于控制邏輯,在MVC架構(gòu)模式中,JSP適合于視圖(視圖),而Servlet適合于控制器(控制器).

1. 客戶端發(fā)送一個請求,該請求是JSP,Web容器將找到相應(yīng)的servlet進(jìn)行處理

2. 將servlet轉(zhuǎn)換為字節(jié)碼文件

3. 將字節(jié)碼文件加載到Web容器中

4. 此時,將在Web容器中創(chuàng)建一個實例

5. 初始化

java多線程避免死鎖_java避免死鎖_java多線程避免死鎖

6. 通過服務(wù)接受請求

7. 然后,Web容器將自動生成兩個對象servlet和service,最后將其銷毀

request: 封裝客戶端的請求,其中包含來自GET或POST請求的參數(shù);

響應(yīng): 封裝服務(wù)器對客戶端的響應(yīng);

pageContext: 其他對象可以通過此對象獲得;

session: 封裝用戶會話的對象;

out: 輸出服務(wù)器響應(yīng)的輸出流對象;

exception: 封裝頁面引發(fā)的異常的對象.

page: JSP頁面本身(相當(dāng)于Java程序中的頁面);

config: Web應(yīng)用程序配置對象;

應(yīng)用程序: 封裝服務(wù)器操作環(huán)境的對象;

jsp: include: 在請求頁面時包含文件.

jsp: useBean: 查找或?qū)嵗疛avaBean.

jsp: setProperty: 設(shè)置JavaBean的屬性.

jsp: getProperty: 輸出JavaBean的屬性.

jsp: forward: 將請求轉(zhuǎn)發(fā)到新頁面.

jsp: plugin: 根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)簽

jsp: param(傳遞參數(shù))

pagez命令

include指令

taglib指令

頁面,請求,會話和應(yīng)用程序

1. ArrayList是基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList是基于鏈表的數(shù)據(jù)結(jié)構(gòu).

2. 對于隨機(jī)訪問獲取和設(shè)置,ArrayList感覺比LinkedList更好,因為LinkedList需要移動指針.

3. 對于添加和刪除操作,LinedList更具優(yōu)勢,因為ArrayList需要移動數(shù)據(jù).

摘要: 最好添加和刪除LinedList,最好是找到ArrayList.

Vector類的所有方法都已同步. 兩個線程可以安全地訪問Vector對象,但是如果一個線程訪問Vector,則代碼將花費大量時間進(jìn)行同步操作.

Arraylist不同步,因此建議在不需要線程安全的情況下使用Arraylist

可比的接口實際上來自java.lang包. 它具有用于排序的compareTo(Object obj)方法

比較器接口實際上來自java.util包. 它具有用于進(jìn)行排序的compare(Object obj1,Object obj2)方法.

ist是一個有序列表,允許重復(fù)的元素并允許為空

java多線程避免死鎖_java多線程避免死鎖_java避免死鎖

Set是一個無序列表,不允許重復(fù)的元素,該元素的位置由hashCode確定,并且最多包含一個null

list和set是用于存儲單列數(shù)據(jù)的集合,而Map是用于存儲雙列數(shù)據(jù)(例如鍵值對)的集合

地圖存儲結(jié)構(gòu)不正確,鍵不能重復(fù),值可以重復(fù),并且哈希圖可以具有空鍵

該進(jìn)程具有獨立的地址空間. 進(jìn)程崩潰后,它不會影響處于保護(hù)模式的其他進(jìn)程,線程只是進(jìn)程中不同的執(zhí)行路徑. 線程具有自己的堆棧和局部變量,但是線程之間沒有單獨的地址空間. 線程的死亡意味著整個過程的死亡. 因此,多進(jìn)程程序比多線程程序更健壯,但是在多個進(jìn)程之間切換時,它的成本更高. 資源較大,效率較差. 但是對于某些需要同時執(zhí)行并共享某些變量的并發(fā)操作,只能使用線程,而不能使用進(jìn)程.

進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位

程序中至少有一個進(jìn)程,一個進(jìn)程中至少有一個線程;線程的劃分規(guī)模小于進(jìn)程的劃分規(guī)模(占用資源),這使得多線程程序具有較高的并發(fā)性. 進(jìn)程在運(yùn)行期間具有獨立的內(nèi)存空間,并且內(nèi)存程之間共享,這大大提高了程序的效率. 線程不能獨立運(yùn)行,并且必須存在于進(jìn)程中.

優(yōu)缺點: 線程開銷很小,但不利于資源管理和保護(hù),而過程相反.

在Java中,在給定的時間點,線程只能處于一種狀態(tài). 上圖中的狀態(tài)是所有虛擬機(jī)狀態(tài),而不是操作系統(tǒng)的線程狀態(tài). 線程對象的狀態(tài)存儲在Thread類的內(nèi)部類(狀態(tài))中,該內(nèi)部類是一個枚舉,并且有六個固定狀態(tài): NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING和TERMINATED.

上下文切換是指CPU上的內(nèi)核(操作系統(tǒng)的核心)的進(jìn)程或線程切換. 上下文切換過程中的信息存儲在過程控制塊(PCB-Process Control Block)中. PCB也稱為SwitchFrame(SwitchFrame). 上下文切換信息將始終存儲在CPU內(nèi)存中,直到再次使用為止.

當(dāng)兩個線程互相等待釋放資源時,就會發(fā)生死鎖.

造成僵局的主要原因是

由于系統(tǒng)資源不足

進(jìn)程運(yùn)行的順序不合適

資源分配不當(dāng)?shù)??

僵局的四個必要條件

(1)互斥條件: 資源一次只能由一個進(jìn)程使用

(2)請求和保持條件: 當(dāng)一個進(jìn)程被請求資源阻塞時,它將保留所獲取的資源.

(3)非剝奪條件: 進(jìn)程已獲取的資源在用盡之前不能被強(qiáng)行剝奪.

(4)循環(huán)等待條件: 多個進(jìn)程之間形成一種循環(huán)等待資源關(guān)系.

兩者都可以中止線程的執(zhí)行.

兩者之間的主要區(qū)別在于,sleep方法不會釋放鎖,而wait方法會釋放鎖.

等待通常用于線程之間的交互/通信,而睡眠通常用于掛起執(zhí)行.

調(diào)用wait()方法后,該線程將不會自動喚醒,其他線程需要在同一對象上調(diào)用notify()或notifyAll()方法. 執(zhí)行sleep()方法后,線程將自動喚醒. 或者,您可以使用wait(長時間超時)在超時后自動喚醒線程.

為什么在調(diào)用start()方法時執(zhí)行run()方法,為什么不能直接調(diào)用run()方法?

新建一個線程,該線程進(jìn)入新狀態(tài);調(diào)用start()方法將啟動一個線程并使該線程進(jìn)入就緒狀態(tài),并且可以在分配時間片后開始運(yùn)行. start()將執(zhí)行線程的相應(yīng)準(zhǔn)備工作,然后自動執(zhí)行run()方法的內(nèi)容,這是真正的多線程工作. 通過直接執(zhí)行run()方法,run方法將在主線程下作為普通方法執(zhí)行,并且不會程中執(zhí)行,因此這不是多線程工作.

摘要: 調(diào)用start方法以啟動線程并使線程進(jìn)入就緒狀態(tài),而run方法只是線程的常規(guī)方法調(diào)用java多線程避免死鎖,或者在主線程中執(zhí)行.

①都是可重入鎖

兩者都是可重入鎖. “可重入鎖”的概念是您可以再次獲取自己的內(nèi)部鎖. 例如,線程已獲取對象的鎖,而對象鎖尚未釋放. 當(dāng)它想再次獲取該對象的鎖時,仍然可以獲取它. 如果它是可解鎖且可重入的,則將導(dǎo)致死鎖. 每次同一線程獲取一個鎖時,鎖計數(shù)器都會增加1,因此只有在鎖計數(shù)器降至0時才能釋放該鎖.

②同步取決于JVM,而ReentrantLock取決于API

已同步是由JVM實現(xiàn)的. 前面我們還提到了虛擬機(jī)團(tuán)隊對JDK1.6中的synced關(guān)鍵字進(jìn)行了很多優(yōu)化,但是這些優(yōu)化是在虛擬機(jī)級別實現(xiàn)的,并不直接暴露給我們. ReentrantLock是在JDK級別上實現(xiàn)的(也就是說,在API級別上,需要使用try / finally語句塊來完成lock()和unlock()方法),因此我們可以查看其源代碼以了解其方式已實現(xiàn).

③ReentrantLock比同步功能增加了一些高級功能

java多線程避免死鎖_java多線程避免死鎖_java避免死鎖

與同步相比,ReentrantLock添加了一些高級功能. 有以下三點: ①等待可以打斷; ②可以實現(xiàn)公平鎖定; ③可以實現(xiàn)選擇性通知(鎖可以綁定多個條件)

ReentrantLock提供了一種機(jī)制來中斷等待鎖定的線程. 該機(jī)制由lock.lockInterruptible()實現(xiàn). 換句話說,等待線程可以選擇放棄等待并轉(zhuǎn)而處理其他事情.

ReentrantLock可以指定它是公平鎖還是不公平鎖. 而同步只能是不公平的鎖定. 所謂的公平鎖是首先獲得鎖的第一個等待線程. 默認(rèn)情況下,ReentrantLock是不公平的. 您可以使用ReentrantLock類的ReentrantLock(布爾公平)構(gòu)造方法來確定它是否公平.


本文來自本站,轉(zhuǎn)載請注明本文網(wǎng)址:
http://www.pc-fly.com/a/jisuanjixue/article-284713-1.html



溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 图们市| 陈巴尔虎旗| 仙居县| 利津县| 巴彦县| 乾安县| 吴桥县| 大宁县| 恭城| 林州市| 陆良县| 会同县| 沂源县| 塘沽区| 宣威市| 阜南县| 嘉善县| 鞍山市| 卢湾区| 遵义市| 土默特左旗| 聂拉木县| 高碑店市| 邹平县| 黔东| 师宗县| 云林县| 武夷山市| 府谷县| 宁国市| 五台县| 剑阁县| 大名县| 洛浦县| 会宁县| 云和县| 休宁县| 阳泉市| 潼关县| 凤庆县| 西平县|