關於練習執行緒的感想。

2022-08-26 08:27:09 字數 2291 閱讀 6634

我看了下別的大神的部落格。結合自己的練習了下多執行緒的併發問題。我覺得就多執行緒而言。最重要的就是要把整個業務放進同步鎖裡面。

synchronized這個關鍵字有兩種用法1、放方法名前形成同步方法;2、放在塊前構成同步塊。

比如:

class

thread4test implements runnable

catch

(interruptedexception e)

system.

out.println(thread.currentthread().getname()+"

號視窗賣出

"+this.ticket--+"號票"

); }}}

}

輸出結果是

a號視窗賣出10號票

a號視窗賣出9號票

a號視窗賣出8號票

a號視窗賣出7號票

a號視窗賣出6號票

a號視窗賣出5號票

a號視窗賣出4號票

a號視窗賣出3號票

a號視窗賣出2號票

a號視窗賣出1號票

這裡的同步鎖的位置是在run方法裡面。同步的是run方法。這樣的話啟動一條執行緒之後就會一直執行。直到a執行完畢之後b再去執行的時候就沒有票了。

例如:

class thread5test implements

runnable

catch

(interruptedexception e)

system.out.println(thread.currentthread().getname()+"號視窗賣出"+this.ticket--+"號票");}}

}}}

執行結果:

a號視窗賣出10號票

c號視窗賣出9號票

b號視窗賣出8號票

b號視窗賣出7號票

b號視窗賣出6號票

b號視窗賣出5號票

c號視窗賣出4號票

a號視窗賣出3號票

a號視窗賣出2號票

a號視窗賣出1號票

c號視窗賣出0號票

b號視窗賣出-1號票

synchronized放錯了位置,程式將synchronized放在了if語句的後面,當b執行緒取出2好票以後,此時ticket=1,等下一次a、b、c執行緒來的時候,ticket=1>0就進入if語句體,這時cpu分給執行緒的時間片是先b在c後a這樣就導致了上面的結果。

例如:

class thread6test implements

runnable

catch

(interruptedexception e)

system.out.println(thread.currentthread().getname()+"號視窗賣出"+this.ticket--+"號票");}}

}}

輸出結果:

這裡的執行結果也是只有a售票。因為同步鎖的時候同步了整個的迴圈。

整個程式的業務是什麼?業務就是售票。換句話說。就是說要售票的時候不能出錯。售票的時候各個視窗還有業務彼此不能相互交叉干擾。

當乙個執行緒要使用火車票這個資源時,我們就交給它一把鎖,等它把事情做完後在把鎖給另乙個要用這個資源的執行緒

那麼。同步的時候就不是同步程式了。應該是同步銷售火車票的這個業務。例如:

class thread3test implements

runnable

catch

(exception e)

this

.sale();}}

}public

synchronized

void

sale()

}}

這裡銷售火車票就是業務。在這裡同步的時候同步業務,而不是同步後台的票的處理的程式。票就算是再處理出來的也是票。

處理的時候是處理的業務。也就是售票。那麼,只要售票的時候不會出現問題就好。同步應該放在業務上,而不是票的處理上。

我是小菜鳥。這也是我第一次寫部落格。希望大家能夠不吝嗇的多多的指教。同時,也感謝各位大師。大神們在的分享。讓我學到了很多東西。

在此,我也把我的一點小小的經驗分享出來。希望更多的人能夠參與到其中來。

我也說了。我也是一直小菜鳥。希望大家能夠給我多多的指教。我只是寫出來了一點我自己的看法還有經驗。

程式設計這個東西是乙個務實,嚴謹的工作。只有經得起考驗的程式才是好的程式。

在此。也希望大家能夠給我多多的指教。提供更多的看法。我也會虛心的採納。不斷的學習。不斷的成長。

關於多執行緒的一點感想

寫了這麼多年多執行緒程式,多執行緒到底是用來幹嘛的,可能這是個很白痴的問題,就我的親身經歷看開主要是因為一下兩點 1.提公升程式效率 2.使得程式可以非同步執行,乙個執行緒幹這個活,另乙個執行緒幹另乙個活 嚴格來說,感覺這還是為了提公升程式效率,因為cpu本身就是在不同執行緒之間切換的,兩個執行緒能...

關於Linux的感想

最近一周比較清閒,於是有了較多的學習時間,加上最近思考了一些運維自動化的事,結合自己的linux經驗,算是 玩linux 玩了一周。基本是在centos 7.2下。大學時候,我主要學習c c 而且主要是在linux下,尤其是在fedora和ubuntu下,用了幾乎一年多。也裝過多種linux發行版關...

感想 關於球

一直以來都對三維gis的評價不高,認為只是個花架子。但是不可否認三維gis改變了我們對於世界的認識 googleearth等三維軟體給我們展現了一幅真實 直觀的地球,確實很炫。先將三維球分為兩類 a類 arcglobe skyline b類 googleearth等和好多可以執行在pad上的球 ar...