single thread execution模式是指同一時刻只能有乙個執行緒去訪問共享資源,就像獨木橋一次通過乙個人一樣。簡單來說,single thread execution就是採用排他式操作保證同一時刻只能有乙個執行緒訪問共享資源。
先寫個執行緒不安全的栗子:
package com.reyco.mythread;
public
class
gate
//校驗
private
void
verify()
}@override
public string tostring()
}public
class
person
extends
thread
@override
public
void
run()}
}
測試類:
public
static
void
main
(string[
] args)
列印結果:
brokenno.1112588:beycobeijing我們發現id順序發生錯誤,且name和address不匹配;即使name和address首字母相同,仍然發生broke。其實這兩個現象很好解釋,比如a執行緒傳入引數beyco和beijing,當向pass方法傳入beyco時,a執行緒被b執行緒打斷,b執行緒傳入shenzhen,此時verify自然就broke;另一種情況是,繼前面一種情況之後,此時引數已經是beyco和shenzhen,在準備tostring時,b執行緒又將address傳入實參beijing,所以就出現了首字母相同還是broke的情況。***************=
brokenno.1113089:beycoshenzhen
***************=
brokenno.1113562:beycoshenzhen
解決方法很簡單:將pass方法和tostring方法同步即可
public
synchronized string tostring()
/** * 臨界值
* @param name
* @param address
*/public
synchronized
void
pass
(string name,string address)
nodejs 單執行緒 高併發
nodejs為什麼是單執行緒且支援高併發的指令碼語言呢?1.node的優點 i o密集型處理 node的i o請求都是非同步的,如 sql查詢 檔案流操作 http請求 非同步i o?顧名思義就是非同步的發出i o請求 要理解node的原理,可能還需要了解一些多執行緒或者併發的基本知識。nodejs...
Node單執行緒高併發原理
瀏覽器中的js是單執行緒的,node也是單執行緒的。這個單執行緒相當於乙個大管家,一切大小事務都要經過他的手才能辦成,它總是把io任務放入到任務池中。雖然說是單執行緒,但是node也有乙個執行緒池專門負責執行任務池中的任務,它們把任務完成之後會告知主線程以接下來利用cpu完成處理。關鍵在於理清哪些任...
servlet的單執行緒模式
實現servlet的單執行緒的jsp命令是 page isthreadsafe false page isthreadsafe true false 預設值為true isthreadsafe false模式表示它是以singleton模式執行。該模式implements了介面singlethrea...