linux下線程通信的方式有哪些尤慰?
1.管道(pipe)/namedpipe(有名管道)
2.信號(hào)(signal)
3.報(bào)文(message)隊(duì)列
4.共享內(nèi)存
5.套接字(socket)
6.信號(hào)量(semapher)
HTTP 1.1協(xié)議中 的八個(gè)標(biāo)準(zhǔn)的方法
OPTIONS 返回服務(wù)器特定資源所支持的請(qǐng)求方法,也可以用來(lái)測(cè)試服務(wù)器的功能性(通過(guò)向web服務(wù)器發(fā)送*的請(qǐng)求)忿危;
HEAD 向服務(wù)器索要和GET請(qǐng)求一致的響應(yīng),只不過(guò)響應(yīng)體不會(huì)被返回妆档,這個(gè)方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下萍悴,就可以獲取包含在響應(yīng)頭里面的元信息;
GET 向特定的資源發(fā)起請(qǐng)求太颤;
POST 向特定的資源發(fā)送數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)苞俘。數(shù)據(jù)被包含在請(qǐng)求體中,POST請(qǐng)求可以導(dǎo)致新的資源建立或者已有資源的修改
PUT 向特定資源位置上傳其最新的內(nèi)容
DELETE 請(qǐng)求服務(wù)器刪除Request-Url標(biāo)識(shí)中的資源
TANCE 回顯服務(wù)器的請(qǐng)求龄章,主要用于測(cè)試或者診斷
CONNECT HTTP1.1 中預(yù)留的能夠?qū)⑦B接改為管道連接方式的代理服務(wù)器
單例模式 線程存在不安全的問(wèn)題
只要是存在多個(gè)線程修改同一個(gè)成員變量吃谣,就會(huì)存在線程安全的問(wèn)題!
Map集合
HashMap是線程不安全的
兩個(gè)場(chǎng)景
① :使用在方法內(nèi)的局部變量時(shí)做裙,局部變量屬于當(dāng)前線程級(jí)別的變量岗憋,其他線程訪問(wèn)不了,也談不上安不安全了锚贱!
②:當(dāng)使用單例對(duì)象的成員變量的時(shí)候仔戈,這個(gè)時(shí)候多個(gè)線程訪問(wèn)同一個(gè)HashMap操作就會(huì)存在線程安全的問(wèn)題!
為了解決場(chǎng)景②存在的問(wèn)題拧廊,我們可以使用:HashTable
查看源碼可以知道监徘,他的大部分方法都是被synchronized修飾,方法級(jí)別的修飾
其中吧碾,get和put不能同時(shí)執(zhí)行;丝!滤港!效率非常低啊廊蜒,不建議使用
對(duì)于復(fù)合操作趴拧,很有可能也會(huì)出現(xiàn)線程安全問(wèn)題;
下面是另一種方案:
使用Collections.aynchronizedMap()方法山叮,其實(shí)就是把傳入的HashMap包裝了同步而已
每次對(duì)HashMap進(jìn)行操作的時(shí)候著榴,先要獲得mutex對(duì)象這個(gè)鎖才能進(jìn)去,所以效率不會(huì)好到哪里去屁倔。脑又。。也不建議使用
接下锐借,下一種方案(ps:廣開思路问麸,嘻嘻)
ConcurrentHashMap(不多BB,直接推薦吧)
jdk8之前使用分段鎖機(jī)制,jdk8之后钞翔,又加入了紅黑樹和CAS算法來(lái)實(shí)現(xiàn)的
JVM內(nèi)存模型(HotSpot)
在java虛擬機(jī)中严卖,方法區(qū)是可供各個(gè)線程共享的運(yùn)行時(shí)內(nèi)存,它存儲(chǔ)了每一個(gè)類的結(jié)構(gòu)信息布轿,例如:運(yùn)行時(shí)的常量池哮笆,字段和方法數(shù)據(jù),構(gòu)造函數(shù)的普通方法的字節(jié)碼內(nèi)容等等...
這個(gè)地方保留明天細(xì)看Lぁ3碇狻!萝毛!先睡去了
juc那個(gè)包下的類源碼 值得一看