玩轉併發 單執行緒執行設計模式

2021-09-10 23:42:33 字數 1335 閱讀 4875

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

***************=

brokenno.1113089:beycoshenzhen

***************=

brokenno.1113562:beycoshenzhen

我們發現id順序發生錯誤,且name和address不匹配;即使name和address首字母相同,仍然發生broke。其實這兩個現象很好解釋,比如a執行緒傳入引數beyco和beijing,當向pass方法傳入beyco時,a執行緒被b執行緒打斷,b執行緒傳入shenzhen,此時verify自然就broke;另一種情況是,繼前面一種情況之後,此時引數已經是beyco和shenzhen,在準備tostring時,b執行緒又將address傳入實參beijing,所以就出現了首字母相同還是broke的情況。

解決方法很簡單:將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...