網路程式設計的併發問題

2021-07-12 04:57:43 字數 895 閱讀 5748

風吹山崗

2016-05-29

1.      在socket與serversocket之間收發流有getinputstream()和getoutputstream()

兩個類socket、serversocket

三個方法:accept(),getinputstream()和getoutputstream()

在socket中,一般getinputstream()和getoutputstream()的方法不要求close,防止出現socket closed的問題。

2.      多執行緒併發問題

比如在乙個atm系統中,多個操作同時對同乙個賬戶進行取款、轉賬等操作,就會造成系統紊亂,資料出錯。那要怎麼辦呢?那我們要保證我們在對這個賬戶進行操作時,資料是正確的,也就是不受干擾的。所以我們要加鎖。

首先第一種,加操作鎖(synchronized)但是這種鎖只能對某一種操作進行加鎖,比如轉賬或者取款,顯然這種加鎖方式是很不健康的。

第二種加鎖方式是檔案鎖(trylock)。就是在你訪問這些操作之前先對檔案加鎖,在進行操作。其他使用者就不能對檔案進行操作,只能讀取,保證了資料的正確性。但是,這種加鎖方式,由於檔案是共享的,即在我們的atm例子中,txt資料檔案只有乙份,所以在對檔案加鎖的時候,其他使用者都不能進行取款轉賬這些操作,要等某一使用者操作完,檔案解鎖的時候再加鎖再操作。所以顯然這種加鎖方式不僅失去了系統的併發性,而且也是不現實的。

第三種加鎖方式特點:「批量,按順序,寫」。首先我們可以在這個txt檔案前建乙個操作池。用於儲存使用者對它的操作指令。即建立乙個陣列,按順序儲存它的指令操作,再按順序讀取指令,不斷地迴圈,使得每個使用者都可以隨時對它進行操作。有時候指令多時,或者操作池滿時,可以對使用者先返回提醒訊息,顯示系統繁忙等訊息。所以需要在使用者那邊有乙個死迴圈,一直向操作池這邊訪問該指令是否已執行,並返回資訊給使用者。

網路程式設計併發問題

單程序設定為非阻塞from socket import 建立乙個物件 tcp server socket af inet,sock stream 設定物件為非阻塞 tcp server.setblocking false 繫結位址和埠 tcp server.bind 6667 設定監聽的數量 tcp...

解決併發問題

一.使用redis鎖 智慧型雲 工單系統 搶單 工單id鎖key public static final string cloud live gain order lock orderid cloud live gain order lock orderid component public cla...

Connection併發問題

connection lock getconnection lock.setautocommit false lock.createstatement execute select from zhaojianyong for update final connection connection ge...