linux下線程通信的方式有哪些?
1.管道(pipe)/namedpipe(有名管道)
2.信號(signal)
3.報文(message)隊列
4.共享內存
5.套接字(socket)
6.信號量(semapher)
HTTP 1.1協議中 的八個標準的方法
OPTIONS 返回服務器特定資源所支持的請求方法,也可以用來測試服務器的功能性(通過向web服務器發送*的請求);
HEAD 向服務器索要和GET請求一致的響應,只不過響應體不會被返回,這個方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應頭里面的元信息;
GET 向特定的資源發起請求;
POST 向特定的資源發送數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中,POST請求可以導致新的資源建立或者已有資源的修改
PUT 向特定資源位置上傳其最新的內容
DELETE 請求服務器刪除Request-Url標識中的資源
TANCE 回顯服務器的請求,主要用于測試或者診斷
CONNECT HTTP1.1 中預留的能夠將連接改為管道連接方式的代理服務器
單例模式 線程存在不安全的問題
只要是存在多個線程修改同一個成員變量,就會存在線程安全的問題!
Map集合
HashMap是線程不安全的
兩個場景
① :使用在方法內的局部變量時,局部變量屬于當前線程級別的變量,其他線程訪問不了,也談不上安不安全了!
②:當使用單例對象的成員變量的時候,這個時候多個線程訪問同一個HashMap操作就會存在線程安全的問題!
為了解決場景②存在的問題,我們可以使用:HashTable
查看源碼可以知道,他的大部分方法都是被synchronized修飾,方法級別的修飾
其中,get和put不能同時執行!!!效率非常低啊,不建議使用
對于復合操作,很有可能也會出現線程安全問題;
下面是另一種方案:
使用Collections.aynchronizedMap()方法,其實就是把傳入的HashMap包裝了同步而已
每次對HashMap進行操作的時候,先要獲得mutex對象這個鎖才能進去,所以效率不會好到哪里去。。。也不建議使用
接下,下一種方案(ps:廣開思路,嘻嘻)
ConcurrentHashMap(不多BB,直接推薦吧)
jdk8之前使用分段鎖機制,jdk8之后,又加入了紅黑樹和CAS算法來實現的
JVM內存模型(HotSpot)
在java虛擬機中,方法區是可供各個線程共享的運行時內存,它存儲了每一個類的結構信息,例如:運行時的常量池,字段和方法數據,構造函數的普通方法的字節碼內容等等...
這個地方保留明天細看!!!!先睡去了
juc那個包下的類源碼 值得一看